Pозділ 2 теоретичні відомості мови програмування java 3 страница

Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru . (1.5)
Число Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru використовується в якості шифротексту. Для розшифрування потрібно обчислити

Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru . (1.6)
Неважко переконатися, що при розшифруванні ми відновимо вихідне повідомлення:

Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru (1.7)
З умови

Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru (1.8)
випливає, що

Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru (1.9)
для деякого цілого Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru , отже

Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru (1.10)
Згідно з теоремою Ейлера:

Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru , (1.11)
тому

Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru (1.12)

Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru (1.13)

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

Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru

Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru

Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru

Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru

Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru (1.14)

Вибір малого значення відкритого показника може призвести до розкриття повідомлення, якщо воно відправляється відразу декільком одержувачам, але ця проблема вирішується за рахунок доповнення повідомлень.
Значення секретного показника Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru повинне бути досить великим. У 1990 році Міхаель Вінер показав, що якщо
Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru і Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru , (1.15)
то є ефективний спосіб обчислити Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru по Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru і Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru . Однак, якщо значення Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru вибирається невеликим, то Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru виявляється досить великим і проблеми не виникає.
Система 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^b mod P, c2= A^m mod P (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=Y1^a * a^b mod P=23^7 * 31^6 mod 41=40,
c2= A^m mod P= 23^15 mod 41= 40
Якщо с1 = с2, то цифровий підпис в повідомленні m=15 вірний. [8]
Алгоритм Диффі-Хеллмана:
Припустимо, що обом абонентам відомі деякі два числа g і p (наприклад, вони можуть бути «зашиті» в програмне забезпечення), які не є секретними і можуть бути відомі також іншим зацікавленим особам. Для того, щоб створити невідомий більш нікому секретний ключ, обидва абонента генерують великі випадкові числа: перший абонент — число a, другий абонент — число b. Потім перший абонент обчислює значення A = gamod p і пересилає його друга, а другий обчислює B = gbmod p і передає першому.
Передбачається, що зловмисник може отримати обидва цих значення, але не модифікувати їх (тобто у нього немає можливості втрутитися в процес передачі). На другому етапі першого абонент на основі наявної в нього a і отриманого по мережі B обчислює значення Bamod p = gabmod p, а другий абонент на основі наявної в нього b і отриманого по мережі A обчислює значення Abmod p = gabmod p. Як неважко бачити, у обох абонентів вийшло одне і те ж число: K = gabmod p. Його вони і можуть використовувати в якості секретного ключа, оскільки тут зловмисник зустрінеться з практично нерозв’язною (за розумний час) проблемою обчислення gabmod p по перехоплених gamod p і gbmod p, якщо числа p, a, b обрані досить великими.

Pозділ 2 теоретичні відомості мови програмування java 3 страница - student2.ru

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

Під час роботи алгоритму, кожна сторона:
генерує випадкове натуральне число a — закритий ключ;
спільно з віддаленої стороною встановлює відкриті параметри p і g (зазвичай значення p і g генеруються на одній стороні і передаються іншій), де:
p є випадковим простим числом;
g є первісним коренем за модулем p;
обчислює відкритий ключ A, використовуючи перетворення над закритим ключем:
A = ga mod p, обмінюється відкритими ключами з віддаленої стороною;
обчислює загальний секретний ключ K, використовуючи відкритий ключ віддаленої сторони B і свій закритий ключ a, K = Ba mod p. Ключ виходить рівним з обох сторін, тому що:
Ba mod p=(gb mod p)a mod p=gab mod p=(ga mod p)b mod p=Ab mod p (1.18) [9]

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

PОЗДІЛ 2 ТЕОРЕТИЧНІ ВІДОМОСТІ МОВИ ПРОГРАМУВАННЯ JAVA

2.1. Вибір засобу вирішення проблеми
Для розробки нового методу шифрування було обрано мову програмування 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 накладає обмеження, внаслідок якого аплет може встановлювати з’єднання лише з хостом, з якого він був загружений і ні з яким більше. Але це обмеження легко обходиться: на сервері виконується програма-сервер, з якою з’єднуються усі клієнти і через яку здійснюється обмін інформацією. Таким чином така програма повинна мати архітектуру клієнт/сервер.

2.1. Об’эктно оріэнтована мова програмування Java
Наразі немає особливої потреби переконувати когось в перевагах об’єктно-орієнтованого підходу до розробки програм. Не тільки створення великих проектів, а навіть розуміння того, як працюють сучасні операційні системи, неможливе без досконалого знання принципів об’єктно-орієн­тованого програмування. Більше того, об’єктний стиль розробки програм став своєрідним правилом “хорошого тону” в світі програмістів. Між тим, так було далеко не завжди.
Чому ж багато народу з радістю витрачає службовий і вільний час на складання програм? Мабуть, одною з причин є швидкість, з якою в галузі програмування впроваджуються нові ідеї та технології. Завжди на горизонті є щось новеньке.
Мова Java, можливо, якнайкраще ілюструє попереднє твердження. Лише за кілька років Java пройшла шлях від концепції до однієї з найпопулярніших машинних мов.
Перша робоча версія мови, що носила назву “Oak”, з’явилася в компанії Sun Microsystems, Inc в 1991 році. Весною 1995 року, після внесення достатньо суттєвих змін, її було перейменовано в Java. Головним стимулом її створення була потреба в незалежній від платформи мові, яку можна було б використовувати для розробки програмного забезпечення різноманітних електронних пристроїв: комп’ютерів, мобільних телефонів, мікрохвильових печей тощо. Бурхливий розвиток Інтернет став додат­ковим фактором, що сприяв популярності Java, оскільки також вимагав розроблення програм, що легко переносяться.
Створення мови Java – це один із самих значних кроків вперед в області роз­робки середовищ програмування за останні 20 років. HTML (Hypertext Mark­up Language – мова розмітки гіпертексту) був необхідний для статичного розміщення сторінок у “Всесвітній павутині” WWW (World Wide Web). Мова Java потрібна була для якісного стрибка в створенні інтерактивних продуктів для Internet.
Багато властивостей Java отримав від C і C++. Проектувальники Java свідомо пішли на це, оскільки знали, що знайомий синтаксис зробить мову привабливою для легіонів досвідчених програмістів C і C++. В той же час між Java і C++ існують суттєві практичні та філо­софські відмінності. Неправильно вважати Java і вдосконаленою версією мови C++, розробленою з метою її заміни. Це – різні мови, кожна з яких вирішує своє коло проблем. Принципи об’єктно-орієнтованого програмування, втілені в C++, були розширені та вдосконалені в Java.
Ще один важливий аргумент на користь Java – відсутність потреби в наявності ліцензії на її використання. Хоча сторонні виробники про­по­нують платні інструментальні середовища для розробки та відлагодження Java-програм, на Webсервері фірми Sun http://java.sun.com завжди можна знайти та завантажити "рідний" безкоштовний варіант компілятора Java (Java Development Kit) разом з усім необхідним для створення програм.
Розглянемо, що таке об’єктно-орієнтоване програмування. Як ми знаємо, всі комп’ютерні програми складаються з двох елементів: коду та даних. Відповідно будь-яка програма може бути концептуально організована або навколо її коду, або навколо її даних. Іншими словами, деякі програми концентрують свою увагу на тому, “що робиться з даними”, а інші – на тому, “на що цей процес впливає”.
Існує декілька парадигм (ключових підходів), які управляють конструюванням програм. Перший підхід вважає програму моделлю, орієнтованою на процес (process-oriented model). При цьому програму визначають послідовності операторів її коду.
Перші компілятори (на­прик­лад, FORTRAN) підтримували проце­дур­ну модель програмування, в основі якої лежить використання функцій. Наступний етап розвитку пов’язаний з переходом до стуктурної моделі програмування (до неї відносяться компілятори ALGOL, Pascal, C), в основі якого лежать такі положення: про­грами представляються у ви­гля­ді сукупності взаємопов’язаних про­це­дур і даних, якими ці процедури (або бло­ки) оперують. Тут широко використовуються процедурні блоки і міні­мальне використання GOTO. Ці програми є більш прості. Такі мови про­гра­­мування, як Pascal, C успішно використовують цю модель. Але тут часто виникають проблеми, коли зростає розмір і складність програм.

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

1. Можна повторно використовувати код програми і таким чином економити час на розробку.

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

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

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

Наши рекомендации