Шифрування даних на мікропроцесорах за допомогою мови програмування Java

Існуючі криптографічні системи та можливості об'єктно-орієнтованої мови програмування Java. Переваги мови Java як засобу створення методів шифрування. Розробка нового алгоритму шифрування. Основні методи оцінки ефективності криптографічної системи.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 29.12.2016
Размер файла 496,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

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

вибираються два великі прості числа і приблизно 512 біт завдовжки кожне;

обчислюється їх добуток ; (1.2) обчислюється функція Ейлера ; (1.3) вибирається ціле таке, що та взаємно просте з ;

за допомогою розширеного алгоритму Евкліда знаходиться число таке, що ; (1.4)

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

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

. (1.5)

Число використовується в якості шифротексту. Для розшифрування потрібно обчислити

. (1.6) Неважко переконатися, що при розшифруванні ми відновимо вихідне повідомлення:

(1.7) З умови

(1.8) випливає, що

(1.9) для деякого цілого , отже

(1.10) Згідно з теоремою Ейлера:

, (1.11) тому

(1.12)

(1.13)

RSA працює значно повільніше симетричних алгоритмів. Для підвищення швидкості шифрування відкритий показник вибирається невеликим, звичайно 3, 17 або 65537 (2 обрати не можна, бо повинно бути взаємно простим із ). Ці числа у двійковому вигляді містять тільки по дві одиниці, що зменшує число необхідних операцій множення при піднесенні до степеня. Наприклад, для піднесення числа до степеня 17 потрібно виконати тільки 5 операцій множення:

(1.14)

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

Значення секретного показника повинне бути досить великим. У 1990 році Міхаель Вінер показав, що якщо і , (1.15) то є ефективний спосіб обчислити по і . Однак, якщо значення вибирається невеликим, то виявляється досить великим і проблеми не виникає.

Система RSA використовується для захисту програмного забезпечення й у схемах цифрового підпису. Також вона використовується у відкритій системі шифрування PGP.

Через низьку швидкість шифрування (близько 30 кбіт/сек при 512 бітному ключі на процесорі 2 ГГц), повідомлення звичайно шифрують за допомогою продуктивніших симетричних алгоритмів з випадковим ключем (сеансовий ключ), а за допомогою RSA шифрують лише цей ключ.

Алгоритм електронного цифрового підпису Ель Гамаля (EGSA):

Надійний та зручний для реалізації на персональних комп'ютерах алгоритм цифрового підпису був розроблений у 1984 році американцем арабського походження Тахером Ель Гамалем. У 1991 році Національний інститут стандартів (НІСТ) США обґрунтував перед комісією Конгресу США вибір цього алгоритму як бази для відповідного національного стандарту. Найменування EGSA має походження від слів El Gamal Signature Algorithm (алгоритм цифрового підпису Ель Гамаля). Ідея EGSA базується на тому, що для практичної неможливості фальсифікації ЕЦП може бути використана практично не розв'язувана задача дискретного логарифмування.

Алгоритм:

1. Перший користувач вибирає випадкове секретне число k, взаємно просте з Р-1, і обчислює число A^k mod P

2. Потім застосовуємо алгоритм Евкліда для значення b рівнянні: m = (X1 * а +k * b) mod (P-1) (1.16) Пара чисел (а, b) буде цифровим підписом повідомлення m.

3. Повідомлення m разом з підписом (а, b) відправляється користувачеві 2.

4. Користувач 2 отримує повідомлення m і з використанням відкритого ключа першого абонента Y1 обчислює два числа за наступними формулами с1=Y1^a * a^bmodP, c2= A^mmodP (1.17) Якщо с1 = с2, то цифровий підпис першого користувача вірний.

Приклад обчислення і перевірки цифрового підпису:

Маємо наступні загальні параметри: Р = 43, А = 23.

Один з користувачівпідписує своє повідомлення m=15 цифровим підписом, сформованим по алгоритму Ель Гамаля. Спочатку він обирає собі закритий ключ Х1=7 і формує відкритий ключ: Y1 = 23^27 mod 41 = 4. Відкритий ключ передаємо іншим партнерам. Потім обираємо випадкове секретне число до, взаємно просте з Р-1. Нехай k=12. Далі обчислюємо число a = A^k mod P= 23^13 mod 41 = 31

Потім за допомогою алгоритму Евкліда знаходиться b в рівнянні:

m = (X1 * а +k * b) mod (P-1) = 15=7 * 31+13 * 6 mod 40

Рішенням буде значення b=6.

Таким чином, пара чисел (31,6) буде цифровим підписом повідомлення m=15.

Потім інший партнер перевіряє цифровий підпис в повідомленні (за бажанням): він отримує отримує відкритий ключ першого користувача та обчислює с1 і с2 і порівнює їх.

Якщо с1 = с2, то цифровий підпис в повідомленні m=15 вірний. [8, стр.3]

Алгоритм Диффі-Хеллмана:

Припустимо, що обом абонентам відомі деякі два числа g і p (наприклад, вони можуть бути "зашиті" в програмне забезпечення), які не є секретними і можуть бути відомі також іншим зацікавленим особам. Для того, щоб створити невідомий більш нікому секретний ключ, обидва абонента генерують великі випадкові числа: перший абонент - число a, другий абонент - число b. Потім перший абонент обчислює значення A = gamodp і пересилає його друга, а другий обчислює B = gbmodp і передає першому.

Передбачається, що зловмисник може отримати обидва цих значення, але не модифікувати їх (тобто у нього немає можливості втрутитися в процес передачі). На другому етапі першого абонент на основі наявної в нього a і отриманого по мережі B обчислює значення Bamod p = gabmod p, а другий абонент на основі наявної в нього b і отриманого по мережі A обчислює значення Abmod p = gabmod p. Як неважко бачити, у обох абонентів вийшло одне і те ж число: K = gabmod p. Його вони і можуть використовувати в якості секретного ключа, оскільки тут зловмисник зустрінеться з практично нерозв'язною (за розумний час) проблемою обчислення gabmod p по перехоплених gamod p і gbmod p, якщо числа p, a, b обрані досить великими.

Рис. 1.1 Приклад шифрування за алгоритмом Диффі-Хеллмана

Під час роботи алгоритму, кожна сторона:

генерує випадкове натуральне число a - закритий ключ;

спільно з віддаленої стороною встановлює відкриті параметри p і g (зазвичай значення p і g генеруються на одній стороні і передаються іншій), де:

p є випадковим простим числом;

g є первісним коренем за модулем p;

обчислює відкритий ключ A, використовуючи перетворення над закритим ключем:

A = gamodp, обмінюється відкритими ключами з віддаленої стороною;

обчислює загальний секретний ключ K, використовуючи відкритий ключ віддаленої сторони B і свій закритий ключ a, K = Bamodp. Ключ виходить рівним з обох сторін, тому що:

Bamodp= (gbmodp) amodp=gabmodp= (gamodp) b modp=Abmodp (1.18) [9, стр.2]

Висновки до I-го розділу

На сьогоднішній день криптографія займає важливе місце в ІТ індустрії. Криптографія являється інструментом боротьби з кібертероризмом. Створення і впровадження високоякісних трендових шифрувальних систем є серйозним кроком на шляху захисту підприємств і, навіть, держави. Щоб рухатися підприємству вперед i збільшувати прибуток, на мою думку, необхідно спочатку захистити те, що компанія вже має. Тому винайдення нового типу шифрування є актуальним на сьогоднішній день.

Найвідомішими криптографічними системами являються шифр Цезаря, Віженера, Вернама, та алгоритм RSA, але, нажаль, вони вже застаріли i їх не використовують належним чином (окрім RSA). C кожним роком, хакери винаходять нові методи злому систем захисту i чим довше шифр знаходиться в користуванні, тим легше його зламати. Саме тому так важливо винайдення та впровадження нових алгоритмів шифрування, які б запобігали втручанням хакерів в різного виду систем.

Pозділ 2. Вибір засобу для розробки методів шифрування

2.1 Переваги мови Java, як засобу створення методів шифрування

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

1. Безпечність

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

WorldWideWeb висунула Java на передній план програмування, і Java, в свою чергу, сильно вплинула і навіть змінила обличчя Internet, розширивши спектр об'єктів, які можуть розповсюджуватись у кіберпросторі. Програми нової форми - аплети - завантажуються з віддаленого сервера і можуть запускатися динамічно, тобто без участі користувача. До появи Java такий підхід був неприпустимий з міркувань безпеки та переносимості. В архітектурі аплетів зроблено ряд штучних обмежень, які роблять їх цілком безпечними. Перш за все, Java є інтерпретованою мовою і простір ресурсів Java-програми обмежений так званою віртуальною Java-машиною (VJM), яка може контролювати поведінку програми і захищати систему від побічних ефектів, які можуть виникати з вини аплета. Крім того, в мові Java є додаткові обмеження, які не дозволять аплету стати "троянським конем". Зокрема,Java-аплет не може отримати доступ до локального жорсткого диску. При такій спробі генерується виключна ситуація.

2. Ефективність

Оскільки аплети Java інтерпретуються, а не компілюються, то їх виконання на різних платформах значно полегшується. В цьому випадку достатньо створити для кожної платформи виконуючу Java-систему. Якщо існує така система для даної операційної системи, то будь-яка Java-програма може виконуватись в даному середовищі без додаткової компіляції на цій платформі. Проте Java не є інтерпретованою мовою в чистому розумінні. Програма на Java компілюється. Результатом роботи компілятора Java є байткод (bytecode). Байткод - це оптимізований набір команд, призначений для виконання уявним пристроєм - віртуальною Java-машиною. В такий спосіб витрати на інтерпретацію зводяться до мінімуму, оскільки байкод вже є оптимізованим, і досягається досить висока продуктивність Java-програм. Наведені вище особливості дають підставу розглядати Java не як ще одну мову програмування, а як окрему інформаційну технологію. Таким чином, інтерпретація - це найлегший шлях до перенесення програм, реалізований в Java технології. Незважаючи на те, що мова Java була розроблена в розрахунку на інтерпретацію, технічно немає нічого такого, що б перешкоджало компіляції байткоду в виконуваний код. До байткоду, який пересилається по мережі, застосовується динамічна компіляція, але це ніяк не впливає на переносимість та безпеку, оскільки роботу програми все ще контролює виконуюча система. Такий підхід застосовано в багатьох виконуючих системах Java, що забезпечує продуктивність на рівні оптимізованого коду С++.

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

3. Об'єктно-орієнтована спрямованість

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

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

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

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

Хоча в Java дескриптори об'єктів і реалізовані у вигляді вказівників, у ній відсутні можливості працювати безпосередньо з ними. Ви не можете перетворити ціле число в вказівник, а також звернутися до довільної адреси пам'яті.

Проте на мові Java можна створювати не тільки апплети, а й консольні додатки, GUI-додатки, сервлети та JSP. Невдовзі після появи технології сервлетів розробники стикнулися з такою проблемою: для динамічної генерації HTML-сторінок за допомогою сервлета HTML-код доводиться розміщувати в самому сервлеті. При цьому HTML-код сторінки змішується з Java-кодом (при цьому логіка роботи програми змішується із зовнішнім виглядом web-сторінки), що ускладнює роботу як програміста, так і веб-дизайнера.

Для вирішення цієї проблеми була розроблена технологія JavaServerPages (JSP). Вона дозволяє розміщувати Java-код всередині HTML-коду web-сторінки. При першому зверненні до jsp-сторінки її код автоматично перетворюється в сервлет і компілюється. Після цього при наступних зверненнях web-сервер викликає не jsp-сторінку, а відкомпільований сервлет. При внесенні змін в jsp-сторінку web-сервер виявляє, що сторінка змінилась, і знову оновлює відповідний сервлет.

У технологіях сервлетів і JSP введене поняття контейнера (container). Servlets-контейнер - це механізм, що відповідає за виконання сервлетів. JSP-контейнер - механізм, що відповідає за перетворення jsp-сторінок у сервлети і передачу цих сервлетів Servlets-контейнеру. Оскільки сервлети і jsp-сторінки викликаються через протокол HTTP, то контейнери часто супроводжує ще один компонент - web-сервер. Сукупність web-серверу і контейнерів формує web-сервер додатків.

Технологія Servlets і JSP були об'єднані з декількома іншими Java-технологіями, і цей комплекс був названий Java 2 EnterpriseEdition (J2EE). Таким чином з'явилися сервери Java-додатків від різних компаній (IBM, BEA, IONA, Borland), у тому числі від самої компанії Sun. Кожна компанія у своєму сервері додатків реалізує технології J2EE по-своєму, але всі вони відповідають специфікації Sun.

Компанія Sun раніше пропонувала безкоштовну еталонну реалізацію Javaweb-сервера додатків під назвою JServ. Після виходу технології J2EE весь код був переданий компанії ApacheSoftwareFoundation, а продукт змінив свою назву на Tomcat.

На даний момент Tomcat є еталонною реалізацією Javaweb-сервера і входить в групу проектів Apache під назвою Jakarta.

4. Стійкість до помилок.

Багатоплатформність середовища Web висуває надзвичайно високі вимоги до надійності програм. Як наслідок, при розробці Java приорітет був відданий можливості створення стійких до помилок програм. Java звільняє програміста від хвилювань з приводу багатьох поширених причин, які викликають помилки програмування. Як вже згадувалося, Java є строго типізованою мовою програмування. Ще виконуюча система Java бере на себе "прибирання сміття", тобто автоматично звільняє пам'ять, яка була розподілена динамічно. Звичайно, це дещо знижує ефективність коду, але запобігає типовим помилкам, коли програміст забуває звільнити виділену пам'ять, або, навпаки, звільняє пам'ять, яка ще використовується. Java підтримує об'єктно-орієнтовану обробку виключних ситуацій подібно до С++. Але на відміну від С++ в Java обробка виключних ситуацій є обов'язкувою. Тобто неможливо скомпілювати програму, яка відкриває файл, не обробивши можливі помилки типу "файл не знайдено", які виникають при цьому. Добре написана Java-програма може сама обробляти всі помилки часу виконання.

5. Підтримка багатозадачності.

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

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

6. Незалежність від архітектури.

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

7. Переваги інтерпретованості в поєднанні з високою продуктивністю.

Як вже згадувалось, Java дозволяє створювати незалежні від платформи програми шляхом компіляції в проміжне представлення, яке називається байткодом. Багато попередніх спроб знайти розв'язок проблеми незалежності від платформи були зроблені за рахунок продуктивності. Інтерпретуючі системи, подібні до BASIC, Perl, страждають на майже неподоланний дефіцит продуктивності. Це було враховано при створенні Java. Незважаючи на те, що Java є інтерпретованою мовою, генерація байткодів була ретельно оптимізована в такий спосіб, щоб одержуваний байткод можна було легко перекладати в машинний код, який працює з дуже високою продуктивністю. Виконуючі системи такого роду не втрачають жодних переваг переносимого коду.

8. Розподіленість.

Мова Java призначена для створення програм, які працюють в розподіленому середовищі Internet на базі протоколів TCP/IP. Насправді доступ до ресурсів за допомогою URL відрізняється від доступу до файлу. Крім того в Java наявний засіб передачі повідомлень в межах внутрішнього адресного простору. Це дозволяє забеспечити віддалене виконання процедур. Ці інтерфейси включені у пакет RMI (remotemetodinvocation). Цей засіб привносить високий рівень абстракції в програмування дл я середовища клієнт/сервер.

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

9. Доступність інструментарію та ефективність розробок.

Зазначена вище простота програмування на Java є причиною того, що розробки на Java коштуватимуть дешевше аналогічних на більш потужніх мовах програмування. Цьому ж сприяє і переносимість програм на Java, оскільки ліквідуються витрати пов'язані з адаптацією програми на конкретній платформі. До того ж інтегровані програми-оболонки для розробки Java програм коштують набагато дешевше (70-100$) ніж аналогічні продукти C++, Delphi (~1000$). А набір інструментарію для пакетної компіляції Java програм JDK (JavaDevelopmentKit) є взагалі freeware. Тому платформу Java можна рекомендувати як ідеальну для створення некомерційних програмних продуктів, зокрема для галузі освіти.

10. Перспективи застосування.

Програми на Java можуть знайти різне застосування в навчальному процесі: інтерактивні навчаючі програми (HTML в поєднанні з Java), програми-тести і особливо ділові ігри. Додаткові переваги можна отримати, якщо пистати ці програми у вигляді аплетів, які ініціалізуються з Web сервера внутрішньої мережі Intranet. В такий спосіб можна уникнути інсталяції програми на багатьох комп'ютерах - користувач просто запускає Web-браузер і завантажує потрібну сторінку. Для тестових програм, написаних на Java з використанням архітектури клієнт/сервер можна підвищити ступінь конфіденційності. База даних тестових запитань знаходиться на сервері в каталозі з обмеженим доступом. Коли користувач завантажує аплет, він автоматично підключається до програми-сервера, яка виконується на сервері і може видавати запитання з бази даних у відповідь на запит користувача. В такий спосіб унеможливлюється викрадення бази даних, за умови відсутності фізичного доступу до серверу у користувачів.

Окреме питання - навчальні ділові ігри. Під такою грою розумітимемо гру, за участю кількох користувачів, в якій мається на увазі динамічний обмін інформацією між ними. Система безпеки Java накладає обмеження, внаслідок якого аплет може встановлювати з'єднання лише з хостом, з якого він був загружений і ні з яким більше. [15] Але це обмеження легко обходиться: на сервері виконується програма-сервер, з якою з'єднуються усі клієнти і через яку здійснюється обмін інформацією. Таким чином така програма повинна мати архітектуру клієнт/сервер.

2.2 Об'єктно орієнтована мова програмування Java

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

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

Мова Java, можливо, якнайкраще ілюструє попереднє твердження. Лише за кілька років Java пройшла шлях від концепції до однієї з найпопулярніших машинних мов.

Перша робоча версія мови, що носила назву "Oak”, з'явилася в компанії Sun Microsystems, Inc в 1991 році. Весною 1995 року, після внесення достатньо суттєвих змін, її було перейменовано в Java. Головним стимулом її створення була потреба в незалежній від платформи мові, яку можна було б використовувати для розробки програмного забезпечення різноманітних електронних пристроїв: комп'ютерів, мобільних телефонів, мікрохвильових печей тощо. Бурхливий розвиток Інтернет став додатковим фактором, що сприяв популярності Java, оскільки також вимагав розроблення програм, що легко переносяться.

Створення мови Java - це один із самих значних кроків вперед в області розробки середовищ програмування за останні 20 років.html (Hypertext Markup Language - мова розмітки гіпертексту) був необхідний для статичного розміщення сторінок у "Всесвітній павутині” WWW (World Wide Web). Мова Java потрібна була для якісного стрибка в створенні інтерактивних продуктів для Internet.

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

Ще один важливий аргумент на користь Java - відсутність потреби в наявності ліцензії на її використання. Хоча сторонні виробники пропонують платні інструментальні середовища для розробки та відлагодження Java-програм, на Webсервері фірми Sunhttp://java. sun.com завжди можна знайти та завантажити "рідний" безкоштовний варіант компілятора Java (Java Development Kit) разом з усім необхідним для створення програм.

Розглянемо, що таке об'єктно-орієнтоване програмування. Як ми знаємо, всі комп'ютерні програми складаються з двох елементів: коду та даних. Відповідно будь-яка програма може бути концептуально організована або навколо її коду, або навколо її даних. Іншими словами, деякі програми концентрують свою увагу на тому, "що робиться з даними”, а інші - на тому, "на що цей процес впливає”.

Існує декілька парадигм (ключових підходів), які управляють конструюванням програм. Перший підхід вважає програму моделлю, орієнтованою на процес (process-orientedmodel). При цьому програму визначають послідовності операторів її коду.

Перші компілятори (наприклад, FORTRAN) підтримували процедурну модель програмування, в основі якої лежить використання функцій. Наступний етап розвитку пов'язаний з переходом до структурної моделі програмування (до неї відносяться компілятори ALGOL, Pascal, C), в основі якого лежать такі положення: програми представляються у вигляді сукупності взаємопов'язаних процедур і даних, якими ці процедури (або блоки) оперують. Тут широко використовуються процедурні блоки і мінімальне використання GOTO. Ці програми є більш прості. Такі мови програмування, як Pascal, C успішно використовують цю модель. Але тут часто виникають проблеми, коли зростає розмір і складність програм.

Інший підхід, названий об'єктно-орієнтованим програмуванням (ООП), було створено для управління зростаючою складністю програм. ООП організує програму навколо її даних (тобто навколо об'єктів) і набору чітко визначених інтерфейсів з цими даними. Об'єктно-орієнтовану програму можна характеризувати як доступ до коду, що управляється даними (datacontrollingaccesstodata). Як ми побачимо далі, такий підхід має деякі організаційні переваги, а саме: можна повторно використовувати код програми і таким чином економити час на розробку.

1. Програми з використанням ООП добре структуровані, що дозволяє добре розуміти, які функції виконують окремі підпрограми.

2. Програми з використанням ООП легко тестувати і модифікувати. Можна розбити програму на компоненти і тестувати роботу кожної з них.

Всі мови ООП забезпечують механізми, які допомагають реалізувати об'єктно-орієнтовану модель. До них відносять абстракцію, інкапсуляцію, успадкування і поліморфізм. Також їх часто називають основними принципами ООП.

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

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

Основою абстракції та інкапсуляції в Java є клас. Клас визначає структуру та поведінку (дані і код) деякого набору об'єктів. Кожен об'єкт заданого класу містить як структуру (дані), так і поведінку, що визначається класом (так, як би ці об'єкти було проштамповано шаблоном у формі класу). Тому об'єкт іноді ще називають екземпляром класу. Таким чином, клас - це логічна конструкція, а об'єкт - це фізична реальність.

При створенні класу необхідно специфікувати код і дані, що складають цей клас. Разом всі ці елементи називають членами (members) класу. Дані, що визначаються в класі, називають змінними-членами (membervariables), або полями класу. Код, який оперує з цими даними (тобто функції, що знаходяться в середині класу), називають методами-членами (membermethods), або просто методами. В правильно записаних Java-програмах методи визначають, як можна використовувати змінні-члени. Отже, поведінку та інтерфейс класу визначають методи, що оперують з даними його екземплярів.

Оскільки мета створення класу - це інкапсуляція складності, існують механізми приховування її реалізації в середині класу. Методи і поля класу можуть бути помічені як private (приватний, локальний) або public (загальний). Модифікатор public вказує на все, що потрібно знати зовнішнім користувачам класу. Методи та поля з модифікатором private є доступними лише для методів даного класу. Будь-який код, що не є членом даного класу, не має доступу до private-методів і полів. Оскільки private-члени класу є доступними для інших частин програми тільки через public-методи класу, можна бути впевненим, що ніякі непотрібні дії не виконуються.

Успадкування (наслідування) - це процес, за допомогою якого один об'єкт отримує властивості іншого об'єкта. Воно важливе, тому що підтримує концепцію ієрархічної класифікації. Переважною частиною знань можна управляти лише за допомогою ієрархічних (тобто організованих "згори донизу”) класифікацій. Без застосування класифікацій кожен об'єкт потребував би явного визначення всіх своїх характеристик. Завдяки використанню успадкування об'єкт потребує визначення лише тих якостей, які роблять його унікальним у власному класі. Тому саме механізм успадкування дає можливість одному об'єкту бути специфічним екземпляром загального випадку.

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

Якщо ми захочемо описати більш специфічний клас тварин, такий як ссавці, вони повинні були б мати більш специфічні атрибути, такі як тип зубів і молочні залози. Такий клас відомий як підклас тварин, тоді як клас тварин називають суперкласом (батьківським класом, класом-пращуром).

Поліморфізм (грецькою ”polymorphos” - множинність форм) - властивість, яка дозволяє використовувати один інтерфейс для спільного класу дій. Специфічна дія точно визначається в залежності від конкретної ситуації. Наприклад, розглянемо стек (список типу LIFO - Last-In, First-Out; останнім увійшов, першим вийшов). Програма може потребувати три типи стеків. Один стек використовується для цілих чисел, другий - для чисел з плаваючою крапкою, третій - для символів. Алгоритм, який реалізує кожен стек, один і той самий, хоча дані, що зберігаються, різні. Не об'єктно-орієнтована мова вимагала б створення трьох різних стекових підпрограм, кожна з яких мала б своє власне ім'я. Завдяки поліморфізму в мові Java можна визначити спільний для всіх типів даних набір стекових підпрограм, що використовують одне і те саме ім'я.

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

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

Для відлагодження програм мовою Java підійде будь-який з пакетів: Microsoft Visual J++, Symantec Cafe, Java Add-On зі складу Borland C++ 5.0 чи Sun Java Work Shop. Якщо є бажання користуватися командними файлами, то можна завантажити з Web-сервера http://java. sun.com "рідний" варіант компілятора Java компанії Sun - Java Development Kit (JDK).

У термінах мови Java маленький додаток, що вбудовується в сторінку Web, називається аплетом. Власне кажучи, створення аплетів - основне застосування для Java. Аплети здобули собі звання справжніх прикрас для Web. Аплет може бути і вікном анімації, і електронною таблицею, і усім, що тільки можна собі уявити. Але це не означає, що на Java не можна писати нормальні додатки з вікнами. Ця мова програмування споконвічно була створена для звичайних додатків, що виконуються в Internet і в інтрамережах, і вже потім стала використовуватися для виготовлення аплетів.

Елементарні будівельні блоки в Java називаються класами (як і в C++). Клас складається з даних і коду для роботи з ними. У засобах для розробки мовою Java усі стандартні класи, доступні програмісту, об'єднані для зручності в пакети - ще одні елементарні блоки Java-програм.

На рисунку 2.1 схематично представлено основні етапи створення додатку за допомогою стандартних засобів JDK. Запустимо компілятор Java з назвою javac і отримаємо готовий клас Java - Hello. class:

Рис. 2.1 - Редагування, компіляція та запуск на виконання Java-програми

Javaс Hello. java

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

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

Розглянемо поелементно вихідний текст нашого прикладу. Вся програма складається з одного класу з ім'ям Hello. У цьому класі є єдиний метод main (), аналогічний функції main () у мовах програмування C і C++, який і визначає місце, з якого програма починає виконуватися (так звана точка входу). Модифікатор доступу public перед ім'ям методу main () вказує на те, що цей метод доступний усім класам, що бажають його викликати, незалежно від прав доступу і від місця їхнього розташування. Модифікатор static говорить про те, що для всіх екземплярів класу Hello і в наслідуваних від нього класах існує лише один метод main (), поділюваний між усіма класами, що, можливо, будуть успадковані від Hello. Це допомагає уникнути появи безлічі точок входу в програму, що викликає помилку.

Через змінну-масив args типу String (рядок) передаються параметри командного рядка класу. У Java перший елемент списку параметрів відповідає першому параметру, а не імені програми, що запускається, як це прийнято в мовах C і C++. Доступ до нього можна здійснити через вираз args. Рядок System. out. println ("Hello, World!") посилає рядок тексту в стандартний потік виведення, тобто на екран. Ми відправляємо повідомлення стандартному класу System, що відповідає за основні системно-незалежні операції, наприклад, виведення тексту на консоль. А вже з цього класу ми викликаємо клас стандартного потоку виведення. Слідом йде виклик методу println (), що, власне, і відображає рядок тексту на екрані монітора, по завершенню чого переводить курсор на наступний рядок.

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

Якщо засвоїти вміст пакету Java з ім'ям java. awt, що розшифровується як Abstract Windowing Toolkit (Набір абстрактної роботи з віконною системою), то відкриються незлічимі можливості по створенню інтерфейсів і віконної графіки. Цей пакет забезпечує машинно-незалежний інтерфейс керування віконною системою будь-якої віконної операційної системи. Доскладу java. awt входять більше 40 класів, що відповідають за елементи графічного середовища користувача (GUI). В основному awt застосовується при написанні аплетів для сторінок Web. При перегляді сторінки на Web-сервері аплет передається на машину користувача, де і запускається на виконання.

Першим рядком в аплет включаються всі необхідні класи з пакету java. awt, про який ми тільки що говорили. Ключове слово import має приблизно те ж значення, що й оператор #include мов C і C++. Далі слідує опис класу нашого аплета, якому передує модифікатор доступу public. Його задача - дати можливість використовувати наш клас ззовні, тобто запускати його з зовнішніх програм. Якщо цього слова не буде, компілятор видасть повідомлення про помилку, указавши, що аплету потрібно опис інтерфейсу доступу. Далі йде ключове слово extends і назва класу. Так у Java позначається процес успадкування. Цим словом ми вказуємо компілятору успадкувати (розширити) стандартний клас java. applet. Applet, відповідальний за створення і роботу аплета. Метод init () викликається в процесі ініціалізації аплета. Зараз цей метод порожній, але згодом, можливо, ми скористаємося ним для своїх цілей. За відображення рядка відповідає інший метод - paint (). Він викликається в той момент, коли потрібно перемалювати дані на екрані. Тут за допомогою методу drawString () стандартного класу Graphics малюється рядок "Hello, Java!" з екранними координатами (20, 30).

Опишемо базові типи даних. Ідентифікатори мови Java повинні починатися з букви будь-якого регістра або символів "_" і "$". Далі можуть йти і цифри. Наприклад, _Java - правильний ідентифікатор, а 1_$ - ні. Ще одне обмеження Java виникає з його властивості використовувати для збереження символів кодування Unicode, тобто можна застосовувати тільки символи, що мають порядковий номер більш 0x0 у розкладці символів Unicode.

Коментарі. У стандарті мови Java існує три типи коментарів:

/*Comment*/ // Comment/** Comment*/

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

Цифрові літерали схожі з аналогічними в мові C++. Правила для цілих чисел прості:

якщо в цифри немає суфікса і префікса, то це десяткове число; у вісімкових числах перед цифрою стоїть нуль; для шістнадцяткових чисел префікс складається з нуля і букви X (0x чи 0X); и додаванні до цифри букви L числу присвоюється тип long (довге ціле).

Числа із плаваючою крапкою.

Цілочисельні типи. У мові Java з'явився новий 8-бітний тип byte. Тип int, на відміну від аналогічного в C++, має довжину 32 біти. А для 16-бітних чисел передбачений тип short.

Таблиця 2.1

Чисельні типи даних

Тип

Форма представлення

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

Довжина

(в бітах)

Максимальне значення

byte

Ціле число зі знаком

0

8

127

short

Ціле число зі знаком

0

16

32767

int

Ціле число зі знаком

0

32

2147483647

long

Ціле число зі знаком

0

64

порядку 1018

float

Число з плаваючою точкою

0

32

порядку 1038

double

Число з плаваючою точкою

0

64

порядку 10308

Устандарт Java був введений тип boolean, якого так довго чекали програмісти, що використовують C++. Він може приймати лише два значення: true і false.

У порівнянні з C++ масиви Java перетерпіли значні зміни. По-перше, змінилися правила їхнього опису. Масив тепер може бути описаний двома такими способами:

type name [];

type [] name;

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

char [] arrayName;

arrayName [] = newchar [100];

або сполучити опис масиву з виділенням під нього пам'яті:

chararray [] = newchar [100];

Багатомірних масивів у Java немає, тому доводиться вдаватися до хитрощів. Наприклад, створити багатомірний масив можна як масив масивів:

floatmatrix [] [] = newfloat [5] [5];

Класи:

Говорячи про класи, необхідно ще раз пригадати один з трьох основних принципів ООП - успадкування. Використовуючи його, можна створити головний клас, який визначає властивості, спільні для набору елементів. Надалі цей клас може бути успадкований іншими, більш специфічними класами. Кожен з них додає ті властивості, які є унікальними для нього. В термінології Java клас, який успадковується, називається суперкласом (superclass). Клас, який виконує успадкування, називається підкласом (subclass). Тому підклас - це спеціалізована версія суперкласу. Він успадковує всі поля та методи суперкласу, та додає до них свої власні унікальні елементи. Щоб успадкувати клас, необхідно просто ввести визначення одного класу в інше, використовуючи ключове слово extends.

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

Модифікаторів доступу є три плюс ще один за замовчуванням.

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

friendly - значення за замовчуванням (тобто слово friendly в описі класу ніколи не пишеться!). friendly-класи доступні лише для об'єктів, що знаходяться в тому ж самому пакеті, що і даний клас, незалежно від того, чи є вони нащадками даного класу.

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

abstract - це клас, в якому є хоча б один абстрактний метод, тобто метод, для якого описаний лише заголовок (прототип функції), а саме тіло методу відсутнє. Зрозуміло, що реалізацію цього відсутнього методу покладено на класи-нащадки. Наприклад, створюється деякий клас для перевірки орфографії. Замість того, щоб закладати в нього перевірку української, російської, англійської орфографії, створюючи методи ukraineCheck (), russianCheck () і т.д. можна просто створити абстрактний метод grammarCheck (), перекладаючи роботу щодо перевірки конкретної граматики на класи-нащадки (які, можливо, будуть створені іншими фахівцями).

Можливість створення класів-нащадків - одна з головних переваг ООП. Для того, щоб використати вже існуючий клас слід указати в об'яві класу слово extends (розширює). Наприклад, public class My Class extends Frame.

В основі ієрархії в java знаходиться клас Object. Тому якщо навіть не використовується слово extends в описі класу, то створюється нащадок класу Object.

Нагадаємо, що клас-нащадок успадковує всі дані та методи суперкласу. В мові java відсутнє множинне успадкування (але є інтерфейси, які з успіхом замінюють його).

Чому в Java немає множинного успадкування? Це не випадково, тут спостерігається певна система. В мові Java розробники вирішили позбавитись від всього, що могло викликати проблеми в C++, наприклад, покажчики, множинна спадковість.

Конструктори. Створення екземплярів класу:

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

Конструктор має те ж саме ім'я, що і клас. Наприклад, MyClass (Stringname) {myName=name; }

Як відрізнити - це клас чи конструктор?

MyClassMyClass ()

Так само, як в C++, один клас може мати декілька конструкторів. У цьому випадку вони мають відрізнятися за своїми параметрами. Також в описі конструктору можна використовувати модифікатори доступу, але не всі. Найчастіше конструктори роблять public.

В класах існують два типи змінних: одні належать самому класу, інші ж - різним методам класу.

Ті змінні, що описані не в методах, але в середині даного класу, називають полями класу. Вони доступні для всіх методів даного класу (це як мінімум).

Крім того, можна описувати змінні в середині метода класу. Такі змінні є локальними для метода і доступні тільки для цього метода.

Загальне правило: кожна змінна доступна лише в середині того блока (обмеженого фігурними дужками), в якому її описано.

В таблиці 2.2 наведено правила доступу до полів і методів, описаних за допомогою різних модифікаторів. Елемент, описаний public, доступний з будь-якого місця. Все, що описано private, доступно лише в середині класа. Якщо у елемента взагалі не указаний модифікатор рівня доступу, то такий елемент буде видно з підкласів-нащадків і класів того ж пакета. Саме цей рівень доступу використовується в Java за замовчуванням. Якщо треба зробити, щоб елемент крім того був доступний зовні пакета, але тільки підкласам того ж класа, якому він належить, його слід описати як protected. І, на сам кінець, якщо треба щоб елемент був доступний тільки підкласам, незалежно від того, чи знаходяться вони в даному пакеті, використовуйте комбінацію private protected.

Таблиця 2.2

Доступ до полів і методів для різних модифікаторів

private

friendly (модифікаторвідсутній)

private protected

protected

public

той же клас

+

+

+

+

+

підклас в тому ж пакеті

-

+

+

+

+

незалежний клас втому ж пакеті

-

+

-

+

+

підклас в іншому пакеті

-

-

+

+

+

незалежний клас в іншому пакеті

-

-

-

-

+

Модифікатор static. Цей описувач може використовуватись як з полями, так і з методами. Для поля описувач static означає, що таке поле створюється в єдиному екземплярі незалежно від кількості об'єктів даного класу (звичайні поля - для кожного екземпляру класу). Статичне поле існує навіть тоді, коли немає жодного екземпляра класу. Статичні поля розташовуються Java-машиною окремо від об'єктів класу в момент першого звертання до цього класу.

Розглянемо найбільший і, напевно, самий корисний розділ мови Java, зв'язаний з реалізацією користувацького інтерфейсу. Для цього необхідно вивчити базові класи пакету java. awt (Abstract Window Toolkit), представлені на рисунку 2.3.

Рисунок 2.3 - Ієрархія класів пакету java. awt

Отже, що ж таке awt? Це набір класів Java, кожний з яких відповідає за реалізацію функцій і відображення того чи іншого елемента графічного інтерфейсу користувача (GUI). Практично всі класи візуальних компонентів є нащадками абстрактного класу Component. Лише візуальні елементи меню успадковуються від іншого класу - Menu Component. Керуючі елементи представлені такими класами: Button (кнопка), Checkbox (кнопка з незалежною фіксацією), Choice (список Windows), Label (рядок), List (список вибору Windows) і Scrollbar (смуга прокручування). Це досить прості класи, успадковані від абстрактного класу Component безпосередньо.

Однак у складі java. awt є класи інтерфейсних елементів, що мають проміжного пращура. Гарним прикладом тому є клас Panel для створення різних панелей. У нього є проміжний абстрактний клас-пращур Container, що слугує родоначальником багатьох класів-контейнерів, здатних містити в собі інші елементи інтерфейсу. Від цього ж класу успадковується клас вікна Window, що представляє на екрані найпростіше вікно без меню і рамки. У цього класу є два часто використовуваних нащадки: Dialog, назва якого говорить сама за себе, і Frame - стандартне вікно Windows. Ще один проміжний клас Text Component породжує два корисних у роботі класи - TextField (аналог рядка введення Windows) і багаторядкове вікно текстового введення Text Area. Особняком від всіх елементів стоїть клас Canvas. Його візуальне представлення - порожній квадрат, на якому можна виконувати малювання і який може обробляти події натиснення кнопок миші.

Від свого батьківського класу Component всі візуальні елементи переймають загальну для них усіх поведінку, пов'язану з їх візуальною та функціональною сторонами. Наведемо список основних функцій, що їх виконують всі компоненти, та методів для їх реалізації.

Таблиця 2.3

Основні методи класу Component

Назва методу

Функціональне призначення

1

2

getFont ()

setFont ()

getFontMetrics ()

визначає або встановлює шрифт компонента

setForeground ()

getForeground ()

установлення і зчитування кольору компонента

setBackground ()

getBackground ()

установлення і зчитування кольору тіла компонента

preferredSize () minimumSize ()

повертають менеджеру розкладок інформацію про кращий і мінімальний розміри компонента, відповідно

resize ()

size ()

встановлює і визначає розміри компонента

show ()

hide ()

показує та приховує компонент

isVisible ()

isShowing ()

повертає true, якщо компонент відображений, і значення false, якщо компонент прихований

disable ()

...

Подобные документы

  • Аналіз особливостей мови програмування Java та середовища Android Studio. Розробка програмного забезпечення для якісного та ефективного вивчення іноземних слів. Побудова базових алгоритмів і структури даних. Вибір мови програмування, реалізація програми.

    курсовая работа [335,3 K], добавлен 11.01.2015

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

    дипломная работа [2,8 M], добавлен 22.06.2011

  • Криптографія – математичні методи забезпечення інформаційної безпеки та захисту конфіденційності. Огляд існуючих методів пошуку нових алгоритмів шифрування. Розробка системи оцінки ефективності криптографічних систем. Найпоширеніші методи шифрування.

    дипломная работа [1,2 M], добавлен 13.06.2015

  • Історія виникнення та розвиток методів шифрування. Особливості розробки програми, що виконує шифрування за допомогою доповнювального модуля, який надає доступ до самої програми. Вибір ефективного методу шифрування даних. Розробка відповідного інтерфейсу.

    курсовая работа [1,9 M], добавлен 21.07.2011

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

    отчет по практике [2,6 M], добавлен 18.05.2014

  • Створення баз даних за допомогою стандартних бібліотек Java та клієнт-серверних програм. Основні стандартні класи і методи бібліотек SQL та swing, бібліотек, що дозволяють опрацьовувати дані СУБД та навчитись концепціям програмування мовою Java.

    лабораторная работа [215,3 K], добавлен 04.10.2011

  • Концепції об'єктно-орієнтованого програмування. Методи створення класів. Доступ до методів базового класу. Структура даних, функції. Розробка додатку на основі діалогових вікон, програми меню. Засоби розробки програмного забезпечення мовами Java та С++.

    курсовая работа [502,5 K], добавлен 01.04.2016

  • Історія розвитку мови Java, основні технології та їх застосування для роботи з SQL-серверами. Огляд багатопоточного програмування в Java. Принципи функціонування сервлетів та JSP-сторінок. Зміна розміру графічних об’єктів, робота з кольорами в Java.

    курсовая работа [49,3 K], добавлен 29.03.2010

  • Методи первинної обробки даних - згладжування та характеристика сплайнів. Загальна характеристика об'єктно-орієнтованої мови Java. Принципи побудови графічного інтерфейсу. Розробка алгоритму програми та інтерфейсу користувача програмного продукту.

    дипломная работа [3,3 M], добавлен 10.10.2013

  • Використання мови програмуванння Java при виконанні "задачі лінійного програмування": її лексична структура і типи даних. Методи розв’язання задачі. Особливості логічної структури програми, побудова її зручного інтерфейсу за допомогою симплекс методу.

    курсовая работа [437,9 K], добавлен 24.01.2011

  • Історія створення мови С#. Аналіз алгоритмів кодування даних. Розробка системи в середовищі Visual Studio 2008 Express. Схема шифрування алгоритму DES. Дослідження алгоритму RC2. Приклади хешів RIPEMD-160. Програмна реалізація основних процедур системи.

    дипломная работа [1,7 M], добавлен 25.10.2012

  • Розробка програми для управління навчальним процесом студентської групи вищого навчального закладу. Об’єктно-орієнтоване проектування об’єктів групи. Створення мови програмування Java. Побудова графічного інтерфейсу. Робота з невеликими базами даних.

    курсовая работа [935,3 K], добавлен 21.12.2013

  • Основи безпеки даних в комп'ютерних системах. Розробка програми для забезпечення захисту інформації від несанкціонованого доступу: шифрування та дешифрування даних за допомогою криптографічних алгоритмів RSA та DES. Проблеми і перспективи криптографії.

    дипломная работа [823,1 K], добавлен 11.01.2011

  • Розробка кросплатформового інструменту електронного тестування учнів молодших та середніх класів по іноземній мові. Вибір середовища розробки та системи контролю версій. Опис мови програмування Java та лістинг програми. Апаратні та програмні вимоги.

    дипломная работа [608,3 K], добавлен 26.10.2010

  • Вивчення особливості програмування додатків на мові C++ Builder. Шифрування повідомлення методом перестановки букв за маршрутами типу гамільтонський. Огляд існуючих аналогів. Розгляд необхідних вимог до конфігурації електронно-обчислювальної машини.

    контрольная работа [1,2 M], добавлен 24.07.2014

  • Широкі можливості по використанню комп'ютерних навчальних систем. Розробка навчальної системи мультимедійного посібника з дисципліни "Інформатика і ОТ" на тему "Особливості мови програмування С++. Вказівники". Вимоги до розробки навчальної програми.

    курсовая работа [2,9 M], добавлен 23.11.2010

  • Розробка логічної гри "Тетріс" у складі набору об’єктно-орієнтованих моделей, програмного коду з використанням об’єктно-орієнтованної мови Java. Проектування архітектури гри, аналіз вимог до неї, опис реалізації, кодування та тестування програми.

    курсовая работа [2,2 M], добавлен 24.10.2010

  • Розробка програми для моделювання роботи алгоритму Дейкстри мовою C# з використанням об’єктно-орієнтованих принципів програмування. Алгоритм побудови робочого поля. Програмування графічного інтерфейсу користувача. Тестування програмного забезпечення.

    курсовая работа [991,4 K], добавлен 06.08.2013

  • Основи технології запису на оптичні диски. Довготривале зберігання інформації на оптичних носіях. Дослідження існуючих програмних і технічних засобів шифрування даних. Можливі рішення проблем і попередження злому. Програмні засоби шифрування даних.

    дипломная работа [4,0 M], добавлен 27.01.2012

  • Відомі підходи до реалізації потокового шифрування даних. Регістр зсуву з оберненими зв’язками. Комбінуючий та фільтруючий генератор. Потоковий шифр Alpha1. Розробка структурної схеми алгоритму шифрування Alpha1. Розробка блоку керування пристрою.

    курсовая работа [185,6 K], добавлен 09.04.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.