КОНСТРУЮВАННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ ДЛЯ РОЗРОБЛЕННЯ ВЕБ ПРОГРАМ МОВОЮ ДЖАВА

Інформація про навчальний заклад

ВУЗ:
Інші
Інститут:
Не вказано
Факультет:
ЗІ
Кафедра:
Не вказано

Інформація про роботу

Рік:
2012
Тип роботи:
Конспект лекцій
Предмет:
Програмування частина 4 Технологія системного програмування

Частина тексту файла (без зображень, графіків і формул):

І. З. Лютак КОНСТРУЮВАННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ ДЛЯ РОЗРОБЛЕННЯ ВЕБ ПРОГРАМ МОВОЮ ДЖАВА конспект лекцій 2012 УДК 004.4 Лютак І.  З. Конструювання програмного забезпечення для розроблення веб програм мовою Джава: конспект лекцій, 2012.– 169 с. Даний конспект лекцій з конструювання програмного забезпечення на прикладі підходу розроблення веб програм, складається з 12 лекцій. У конспекті розглянуто основні прийоми конструювання програмного забезпечення на прикладах мови Джава. Розглянуто на стороні сервера та клієнта та веб інтерфейс. Конспект лекцій необхідний для самостійного опрацювання лекційного матеріалу студентами. ЗМІСТ ЛЕКЦІЯ 1 ПРИЧИНИ ВИНИКНЕННЯ JAVA 7 Вступ 7 Історія створення 8 Загальний огляд можливостей 9 Аплети Java 9 Революційна мова програмування 10 Простота і потужність 10 Безпека 11 Об'єктна орієнтованість 11 Надійність 11 Інтерактивність 12 Незалежність від архітектури ЕОМ 12 Інтерпретація плюс висока продуктивність. 13 Простота вивчення 13 Багате об'єктне середовище 13 Питання до лекції 15 ЛЕКЦІЯ 2 ВІДМІННОСТІ JAVA ВІД C++ 16 Глобальні змінні 16 Оператор Goto 16 Покажчики 17 Розподіл пам'яті 17 Незахищені типи даних 18 Ненадійне приведення типів 19 Ненаідійні списки аргументів 19 Роздільні файли заголовків 19 Ненадійні структури 20 Препроцесорна обробка 20 QED 20 Питання до лекції 20 ЛЕКЦІЯ 3 ВВЕДЕННЯ В МОВУ JAVA 22 Крок за кроком 23 Лексичні основи 25 Пропуски 26 Коментарі 26 Зарезервовані ключові слова 27 Ідентифікатори 28 Літерали 29 Цілі літерали 29 Літерали з плаваючою крапкою 30 Логічні літерали 30 Символьні літерали 30 Рядкові літерали 31 Оператори 32 Роздільники 32 Змінні 33 Оголошення змінної 33 Ваш перший крок 34 Питання до лекції 34 ЛЕКЦІЯ 4 ТИПИ 36 Прості типи 36 Цілі числа 36 Byte 37 short 37 іnt 38 long 38 Числа з плаваючою крапкою 39 Float 40 double 40 Приведення типу 40 Автоматичне перетворення типів у виразах 41 Символи 43 Тип boolean 44 Масиви 46 Багатовимірні масиви 48 Знай свої типи 50 ЛЕКЦІЯ 5 ОПЕРАТОРИ 51 Арифметичні оператори 51 Оператор ділення по модулю 52 Арифметичні оператори присвоєння 53 Інкремент і декремент 54 Цілочисельні бітові оператори 54 Зсув вліво і управо 56 Беззнаковий зсув вправо 57 Бітові оператори присвоєння 59 Оператори порівнювання 59 Булеві логічні оператори 60 Оператори швидкої оцінки логічних виразів (short circuit logical operators) 62 Тернарний оператор if-then-else 62 Пріоритети операторів 63 Явні пріоритети 64 ЛЕКЦІЯ 6 КЕРУВАННЯ ВИКОНАННЯМ ПРОГРАМИ 66 Умовні оператори 66 Цикли 72 Оператор кома 75 ЛЕКЦІЯ 7 КЛАСИ 79 Оператор new 80 Оголошення методів 82 Виклик методу 83 Приховання перемінних представників 83 Конструктори 84 Сполучення методів 84 this у конструкторах. 85 Спадкування 87 super 88 Заміщення методів 88 Динамічне призначення методів 90 final 91 finalize 92 static 92 abstract 94 ЛЕКЦІЯ 8 ПАКЕТИ Й ІНТЕРФЕЙСИ 96 Пакети 96 Оператор package 97 Трансляція класів у пакетах 97 Оператор import 98 Обмеження доступу 99 Інтерфейси 101 Оператор interface 102 Оператор implements 102 Перемінні в інтерфейсах 103 ЛЕКЦІЯ 9 РОБОТА З РЯДКАМИ 106 Конструктори 106 Створення рядків 107 Злиття рядків 108 Перетворення рядків 109 Витяг символів 110 Порівняння 111 Рівність 112 Упорядкування 113 Модифікація рядків при копіюванні 115 substring 115 concat 115 replace 115 toLowerCase і toUpperCase 116 trim 116 valueOf 116 StringBuffer 116 Конструктори 117 setLength 118 charAt і setCharAt 118 append 119 insert 119 ЛЕКЦІЯ 10 ОБРОБКА ВИКЛЮЧЕНЬ 121 Основи 121 Типи виключень 122 Неперехоплені виключення 122 try і catch 123 Кілька розділів catch 124 Вкладені оператори try 125 throw 126 finally 129 Підкласи Exception 130 ЛЕКЦІЯ 11 ПРОЦЕСИ І СИНХРОНІЗАЦІЯ 132 Цикл обробки подій у випадку єдиного підпроцесу 132 Пріоритети підпроцесів 133 Синхронізація 133 Повідомлення 133 Підпроцес 134 Runnable 135 Пріоритети підпроцесів 137 Синхронізація 139 Взаємодія підпроцесів 141 Клінч (deadlock) 144 Методи класу 145 currentThread 145 yield 145 sleep(int n) 145 Методи об'єкта 146 start 146 run 146 stop 146 suspend 146 resume 146 setPriority(int p) 147 SetPriority 147 setName(String name) 147 getName 147 ЛЕКЦІЯ 12 УТИЛІТИ 148 Прості оболонки для типів 148 Number 148 Double і Float 149 Нескінченність і Na 149 Integer і Long 150 Character 151 Boolean 151 Перерахування 152 Інтерфейс Enumeration 152 Vector 153 Stack 154 Dictionary 155 HashTable 156 Properties 157 StrinsTokenizer 158 Runtime 159 Керування пам'яттю 160 Виконання інших програм 160 System 161 Властивості оточення 162 Date 162 Порівняння 163 Рядки і годинні пояси 163 Math 164 Тригонометричні функції 164 Random 165 ЛЕКЦІЯ 1 ПРИЧИНИ ВИНИКНЕННЯ JAVA Вступ Взагалі небезпечно оголошувати кожну нову технологію програмування революційною. Що ж у такому разі робить той або інший продукт революційним? Він не може бути тільки компактнішим, швидшим і дешевшим. Такий продукт повинен змінити весь стиль роботи, радикально спростивши рішення складних проблем. Створення мови Java - це дійсно значний крок вперед в області розробки середовищ програмування за останні 20 років. Мова HTML (Hypertext Markup Language - мова розмітки гіпертексту) була необхідна для статичного розміщення сторінок в "Всесвітній павутині" WWW (World Wide Web). Мова Java потрібна для якісного стрибка в створенні інтерактивних продуктів для мережі Internet. Три ключові елементи об'єдналися в технології мови Java і зробили її відмінною від всього, існуючого на сьогоднішній день. Java надає для широкого використовування свої аплети (applets) - невеликі, надійні, динамічні, не залежні від платформи активні мережеві програми, вбудовувані в сторінки Web. Аплети Java можуть настроюватися і розповсюджуватися споживачам з такою ж легкістю, як будь-які документи HTML. Java вивільняє потужність об'єктно-орієнтованої розробки програм, поєднуючи простий і знайомий синтаксис з надійним і зручним в роботі середовищем розробки. Це дозволяє широкому кругу програмістів швидко створювати нові програми і нові аплети. Java надає програмісту багатий набір класів об'єктів для ясного абстрагування багатьох системних функцій, використовуваних при роботі з вікнами, мережею і для вводу-виводу. Ключова риса цих класів полягає у тому, що вони забезпечують створення незалежних від використовуваної платформи абстракцій для широкого спектру системних інтерфейсів. Давайте ближче ознайомимося зі всіма цими трьома аспектами, але спочатку - історія створення. Історія створення Мова Java зародилася як частина проекту створення передового програмного забезпечення (ПЗ) для різних побутових приладів. Реалізація проекту була почата на мові С++, але незабаром виник ряд проблем, найкращим засобом боротьби з якими була зміна самого інструменту - мови програмування. Стало очевидним, що необхідна незалежна мова програмування, яка дозволяє створювати програми, які не доводилося б компілювати окремо для кожної архітектури і можна було б використовувати на різних процесорах під різними операційними системами. Народженню мови Java передувала досить цікава історія. У 1990 році розробник ПЗ компанії Sun Microsystems Патрік Нотон (Patrick Naughton) зрозумів, що йому набридло підтримувати сотні різних інтерфейсів програм, які використовувались в компанії, і повідомив виконавчому директору Sun Microsystems і свого друга Скотт МакНілі (Scott McNealy) про свій намір перейти працювати в компанію NeXT. МакНілі, у свою чергу, попросив Нотона скласти список причин своєї незадоволеності і висунути таке вирішення проблем, начебто він є Богом і може виконати все, що завгодно. Нотон, хоча і не розраховував на те, що хтось зверне увагу на його лист, все ж таки висловив свої претензії, нещадно розкритикувавши недоліки Sun Microsystems, зокрема, архітектуру, що розробляється в той момент, ПЗ NeWS. Нотон був здивований, його лист здобув успіх: він був розісланий всім провідним інженерам Sun Microsystems, які не забарилися відгукнутися і виказати гарячу підтримку своєму колезі і схвалення його поглядів на ситуацію в Sun Microsystems. Звернення викликало схвалення і у вищого керівництва компанії, а саме, у Біла Джоя (Bill Joy), засновника Sun Microsystems, і Джеймса Гослінга (James Gosling), начальника Нотона. Того дня, коли Нотон повинен був піти з компанії, було ухвалене рішення про створення команди провідних розробників з тим, щоб вони робили що завгодно, але створили щось незвичайне. Команда з шести чоловік приступила до розробки нової об'єктно-орієнтованої мови програмування, яка була названа Oak (дуб), на честь дерева, що росло під вікном Гослінга. Незабаром компанія Sun Microsystems перетворила команду Green в компанію First Person. Нова компанія володіла цікавою концепцією, але не могла знайти для неї відповідного застосування. Після ряду невдач несподівано ситуація для компанії різко змінилася: був анонсований броузер Mosaic - так народився World Wide Web, з якого почався бурхливий розвиток Internet. Нотон запропонував використовувати Oak в створенні Internet- програм. Так Oak став самостійним продуктом, незабаром був написаний Oak-компілятор і Oak-браузер "WebRunner". У 1995 році компанія Sun Microsystems ухвалила рішення оголосити про новий продукт, перейменувавши його в Java (єдине розумне пояснення назві - любов програмістів до кави). Коли Java опинилася в руках Internet, стало необхідним запускати Java-аплеты - невеликі програми, завантажувані через Internet. WebRunner був перейменований в HotJava і компанія Netscape встала на підтримку Java-продуктів. Загальний огляд можливостей Аплети Java Кожен аплет - це невелика програма, динамічно завантажувана по мережі - точно так, як і картинка, звуковий файл або елемент мультиплікації. Головна особливість аплетів полягає у тому, що вони є справжніми програмами, а не черговим форматом файлів для зберігання мультфільмів або якої-небудь іншої інформації. Аплет не просто програє один і той же сценарій, а реагує на дії користувача і може динамічно міняти свою поведінку. Саме помітні Web-сторінки з анімацією привернули більшість ранніх прихильників мови Java. Оскільки користувачі не відразу змогли повністю освоїти найбільш революційні аспекти Java, ця мова часто порівнювалася з іншими технологіями для завантаження динамічних зображень і простої взаємодії з Web-клієнтами. Компанії, що традиційно займаються розробкою мультимедіа-технологій, наприклад, Adobe або MacroMedia, стверджували, що їх продукти надають ті ж можливості, що і Java. На думку Kaleida, Taligent і NeXT, їх власні об'єктно-орієнтовані середовища розробки були не менш революційні. Microsoft заявляв про перемогу технології десятилітньої давності. Насправді ніщо не може порівнятися з тим, що ви відкриєте для себе, відчувши потужність програмування на мові Java. Можливість завдання будь-яких рівнів взаємодії з користувачем існує лише у тому випадку, коли використовувана для розробки платформа надає повнофункціональне середовище програмування. Революційна мова програмування Мова повинна була втілювати наступні якості: простоту і потужність, безпеку, об'єктну орієнтованість, надійність, інтерактивність, архітектурну незалежність, можливість інтерпретації, високу продуктивність і легкість у вивченні. Навіть якщо ви ніколи не напишете жодного рядка на мові Java, знати про його можливості вельми корисно, оскільки саме перераховані вище властивості мови додають динаміку сторінкам Всесвітньої павутини. Простота і потужність Після освоєння основних понять об'єктно-орієнтованого програмування ви швидко навчитеся програмувати на Java. У наші дні існує багато систем програмування, що гордяться тим, що в них одну і ту ж мету можна досягти десятком різних способів. У мові Java достаток рішень відсутній - для вирішення задачі у вас буде зовсім небагато варіантів. Прагнення до простоти часто приводило до створення неефективних і невиразних мов типу командних інтерпретаторів. Java до числа таких мов не відноситься - для Вас вся потужність ООП і бібліотек класів. Безпека У популярній літературі наших днів, особливо якщо мова заходить про Internet, стало модною темою обговорення питань безпеки. Люди впевнені, що використовування Internet в комерційній діяльності рівносильне написанню номера своєї кредитної картки на стінці телефонної будки. Один з ключових принципів розробки мови Java полягав в забезпеченні захисту від несанкціонованого доступу. Програми на Java не можуть викликати глобальні функції і діставати доступ до довільних системних ресурсів, що забезпечує в Java рівень безпеки, недоступний для інших мов. Об'єктна орієнтованість Цікаво спостерігати, як численні нові діалекти старих мов безапеляційно оголошуються об'єктно-орієнтованими. Оскільки при розробці мови відсутня важка спадковість, для реалізації об'єктів був вибраний зручний прагматичний підхід. Розробники Java прагнули витримати розумний компроміс між моделлю пуристів - "все є об'єктами", і моделлю хакерів - "піди з моєї дороги". Об'єктна модель в Java проста і легко розширяється, в той же час, заради підвищення продуктивності, числа і інші прості типи даних Java не є об'єктами. Надійність Java обмежує вас в декількох ключових областях і таким чином сприяє виявленню помилок на ранніх стадіях розробки програми. В той же час в ній відсутні багато витоків помилок, властивих іншим мовам програмування (строга типізація, наприклад). Більшість використовуваних сьогодні програм "відмовляє" в одній з двох ситуацій: при виділенні пам'яті, або при виникненні виняткових ситуацій. У традиційних середовищах програмування розподіл пам'яті є досить нудним заняттям - програмісту доводиться самому стежити за всією використовуваною в програмі пам'яттю, не забуваючи звільняти її у міру того, як потреба в ній відпадає. Часто програмісти забувають звільняти захоплену ними пам'ять або, що ще гірше, звільняють ту пам'ять, яка все ще використовується якою-небудь частиною програми. Виняткові ситуації в традиційних середовищах програмування часто виникають в таких, наприклад, випадках, як розподіл на нуль або спроба відкрити неіснуючий файл, і їх доводиться обробляти за допомогою незграбних і нечитабельних конструкцій (окрім Delphi). Java фактично знімає обидві ці проблеми, використовуючи збірник сміття для звільнення незайнятої пам'яті і вбудовані об'єктно-орієнтовані засоби для обробки виняткових ситуацій. Інтерактивність Java створювалася як засіб, який повинен задовольнити насущну потребу в створенні інтерактивних мережевих програм. У Java реалізовано декілька цікавих рішень, що дозволяють писати код, який виконує одночасно масу різних функцій і не забуває при цьому стежити за тим, що і коли повинно відбутися. В мові Java для вирішення проблеми синхронізації процесів застосований найелегантніший зі всіх коли-небудь винайдених методів, який дозволяє конструювати прекрасні інтерактивні системи. Прості в обігу витончені підпроцеси Java дають можливість реалізації в програмі конкретної поведінки, не відволікаючись при цьому на вбудовування глобальної циклічної обробки подій. Незалежність від архітектури ЕОМ Питання про довговічність і переносимість коду важливіше за релігійні війни між ПК і Макінтошами. Творці Java наклали на мову і на середовище часу виконання декілька жорстких вимог, які на ділі, а не на словах дозволяють, одного разу написавши, завжди запускати програму в будь-якому місці і у будь-який час (де існує віртуальна Java-машина - броузери на всіх платформах, OS/2, Netware). Інтерпретація плюс висока продуктивність. Надзвичайна здатність Java виконувати свій код на будь-якій з підтримуваних платформ досягається тим, що її програми транслюються в якесь проміжне уявлення, зване байт-кодом (bytecode). Байт-код, у свою чергу, може інтерпретуватися в будь-якій системі, в якій є середовище часу виконання Java. Більшість ранніх систем, в яких намагалися забезпечити незалежність від платформи, володіла величезним недоліком - втратою продуктивності (Basic, Perl). Не дивлячись на те, що в Java використовується інтерпретатор, байт-код легко переводиться безпосередньо в "рідні" машинні коди (Just In Time compilers) "на льоту". При цьому досягається дуже висока продуктивність (Symantec JIT вбудований в Netscape Navigator). Простота вивчення Мова Java, хоча і складніша ніж мови командних інтерпретаторів, все ж таки невимірно простіша для вивчення, ніж інші інші мови програмування, наприклад C++. Риси мови стануть здаватися вам природними для вирішення тих або інших задач і сприятимуть відробітку хорошого стилю програмування. Оскільки об'єктна модель в Java одночасно проста і виразна, ви швидко освоїтесь з об'єктно-орієнтованим стилем створення програм. Багате об'єктне середовище Середовище Java - це щось набагато більше, ніж просто мова програмування. У неї вбудований набір ключових класів, що містять основні абстракції реального світу, з яким доведеться мати справу вашим програмам. Основою популярності Java є вбудовані класи-абстракції, що зробили її мовою, дійсно незалежною від платформи. Бібліотеки, подібні MFC/COM, OWL, VCL, NeXTStep, Motif і OpenDoc чудово працюють на своїх платформах, проте сьогодні головною платформою стає Internet. У реалізації Java 1.1.6 знаходиться 23 пакети (у Java 1.0.2 їх було 8), а кількість класів - 503 (211). Таблиця 1 - Пакети Java API Ім'я пакету Вміст  java.applet Класи для реалізації аплетів  java.awt Класи для роботи з графікою, текстом, вікнами і GUI  java.awt.datatransfer Класи для забезпечення передачі інформації (Copy/Paste)  java.awt.event Класи і інтерфейси для обробки подій  java.awt.image Класи для обробки зображень  java.awt.peer GUI для забезпечення незалежності від платформи  java.beans API для моделі компонентів JavaBeans  java.io Класи для різних типів введення-висновку  java.lang Класи ядра мови (типи, робота з рядками, тригонометричні функції, обробка виключень, легковагі процеси)  java.lang.reflect Класи Reflection API  java.math Класи для арифметичних операцій довільної точності  java.net Класи для роботи в мережі Інтернет (сокети, протоколи, URL)  java.rmi Класи, пов'язані з RMI (видалений виклик процедур)  java.rmi.dgc Класи, пов'язані з RMI  java.rmi.registry Класи, пов'язані з RMI  java.rmi.server Класи, пов'язані з RMI  java.security Класи для забезпечення безпеки  java.security.acl Класи для забезпечення безпеки  java.security.interfaces Класи для забезпечення безпеки  java.sql   java.text Класи для забезпечення багатоязикової підтримки  java.text.resources Класи для забезпечення багатоязикової підтримки  java.util Разноообразниє корисні типи даних (стеки, сдоварі, хэш-таблиці, дати, генератор випадкових чисел)  java.util.zip Класи для забезпечення архівації   Частину цих пакетів ми розглядатимемо дуже детально (це видно із змісту), інша піде на самостійне опрацьовування. Питання до лекції 1. Основні критерії які лягли в основу створення мови програмування? 2. Для чого використовуються аплети? 3. Чи залежить вміст скомпільованого коду програми на Java від платформи? 4. Як зародилася мова програмування Java? 5. Чи відноситься мова Java до командних інтерпретаторів? 6. Що лежить в основі безпечності виконання програм Java? 7. В чому полягає надійність коду програми на Java? 8. Яку роботу виконує збирач сміття в Java? 9. В чому полягає ін реактивність програм Java? 10. Що таке байт-кодом (bytecode)? ЛЕКЦІЯ 2 ВІДМІННОСТІ JAVA ВІД C++ В більшості книг по C++ ви знайдете такий же опис достоїнств об'єктно-орієнтованого програмування і доказу того, що це - черговий ступінь в розвитку індустрії програмування. У чому ж біда C++ і чому була створена Java? Фактично, більшість архітектурних рішень, прийнятих при створенні Java, була продиктована бажанням надати синтаксис, схожий із C і C++. У Java використовуються практично ідентичні угоди для оголошення змінних, передачі параметрів, операторів і для управління потоком виконанням коду. У Java додані всі хороші риси C++, але виключені недоліки останнього. Глобальні змінні У старі добрі часи Фортрану, коли "справжні чоловіки" писали на асемблері, а програми зберігалися на перфокартах, головним інструментом в програмуванні були глобальні змінні. C перейняла цю особливість і дещо її вдосконалила - програмісту доводилося принаймні оголошувати тип глобальної змінної. Звичайно ж, при використанні глобальних змінних проблема полягала у тому, що будь-яка функція могла привести до широкомасштабних побічних ефектів, змінивши глобальний стан системи. У Java єдиним глобальним простором імен є класова ієрархія. У цій мові просто неможливо створити глобальну змінну, що не належить жодному з класів. Оператор Goto Інша не дуже хороша конструкція традиційних мов програмування - оператор goto, призначений для передачі управління. Всім нам на перших заняттях по програмуванню говорили, що можна обійтися без цього оператора, що погіршує структуру програми і робить її нелегкою для читання. До того, як в C++ з'явився механізм роботи з виключеннями, goto активно використовувався для виходу з циклів у виняткових ситуаціях. У Java оператора goto немає. У ній є зарезервоване ключове слово goto, але це зроблено лише щоб уникнути можливої плутанини - для того, щоб утримати програмістів від його використовування. Проте в Java є оператори continue і break з міткою, які заміняють відсутність goto в тих єдиних випадках, коли використання останнього було б виправдане. А потужний вбудований в Java механізм виключень робить непотрібним використовування goto у всій решті ситуацій. Покажчики Покажчики або адреси в пам'яті - найпотужніша і найбільш небезпечна риса C++. Причиною більшості помилок в сьогоднішньому коді є саме неправильна робота з покажчиками. Наприклад, одна з типових помилок - прорахуватися на одиницю у розмірі масиву і зіпсувати вміст елементу пам'яті, розташованої вслід за ним. Хоча в Java дескриптори об'єктів і реалізовані у вигляді покажчиків, в ній відсутні можливості працювати безпосередньо з покажчиками. Ви не можете перетворити ціле число в покажчик, а також звернутися до довільного адресу пам'яті. Розподіл пам'яті В ряді небезпечних якостей C++ рука в руку з покажчиками йде розподіл пам'яті. Розподіл пам'яті в С, а значить і в C++, спирається на інь і янь ненадійного коду - на виклики бібліотечних функцій malloc() і free(). Якщо ви викличете free() з покажчиком на блок пам'яті, який ви вже звільнили раніше, або з покажчиком, пам'ять для якого ніколи не виділялася - готуйтеся до гіршого. Зворотна проблема, коли ви просто забуваєте викликати free(), щоб звільнити непотрібний більше блок пам'яті, набагато більш підступна. "Витік пам'яті" (memory leak) приводить до поступового уповільнення роботи програми у міру того, як системі віртуальної пам'яті доводиться скидати на диск невживані сторінки із сміттям. І, нарешті, коли всі системні ресурси вичерпані, програма несподівано аварійно завершується, а ви починаєте сушити голову над цією проблемою. У C++ додані два оператори - new і delete, які використовуються багато в чому аналогічно функціям malloc() і free(). Програміст як і раніше відповідає за те, щоб кожен невживаний об'єкт, створений за допомогою оператора new, був знищений оператором delete. В Java немає функцій malloc(), free(). Оскільки в ній кожна складна структура даних - це об'єкт, пам'ять під такі структури резервується разом (heap) за допомогою оператора new. Реальні адреси пам'яті, виділені цьому об'єкту, можуть змінюватися під час роботи програми, але вам не потрібно про це турбуватися. Вам навіть не доведеться викликати free () або delete, оскільки Java - система з так званим збірником сміття. Збірник сміття запускається кожного разу, коли система простоює, або коли Java не може задовольнити запит на виділення пам'яті. Незахищені типи даних C++ одержав в спадок від С всі звичні типи даних останнього. Ці типи служать для представлення цілих і дійсних чисел різних розмірів і точності. Проте, реальний діапазон і точність цих типів коливається залежно від конкретної реалізації транслятора. Поведінка коду, який чудово транслюється і виконується на одній машині, може радикально відрізнятися при зміні платформи. Різні транслятори C++ можуть резервувати під цілий тип 16, 32 або 64 біти залежно від розрядності машинного слова. У Java ця проблема розв'язана, оскільки, як ви побачите в наступних лекціях, в ній для всіх базових числових типів незалежно використовуються певні угоди, не залежні від конкретної реалізації середовища. Не виключено, що на деякій архітектурі реалізувати роботу з числами таких розмірів в інтерпретаторі Java буде важко, або реалізація буде неефективна, проте це єдиний спосіб гарантувати відтворені результати на широкому спектрі платформ. Ненадійне приведення типів Приведення типів в С і C++ - потужний механізм, який дозволяє довільним чином змінювати тип покажчиків. Такою технікою треба користуватися з обережністю, оскільки в С і С++ не передбачено засобів, що дозволяють знаходити неправильне використовування приведення типів. Оскільки об'єкти в C++ - це просто покажчики на адреси пам'яті, в цій мові під час виконання програми немає способу знаходити випадки приведення до несумісних типів. Дескриптори об'єктів в Java включають повну інформацію про клас, представником якого є об'єкт, так що Java може виконувати перевірку сумісності типів на фазі виконання коду, порушуючи виключення у разі помилки. Ненаідійні списки аргументів C++ гордиться своєю можливістю передавати покажчики на довільні типи в списках аргументів змінної довжини, відомих під назвою varargs. Інтерфейс varargs - просте розширення, засноване на можливості приведення будь-якої адреси до довільного типу, при цьому турботи про перевірку допустимості типів лягають на плечі програміста. Було б чудово, якби в Java існувала безпечна можливість оголошувати і передавати списки аргументів змінної довжини, але в Java 1.0 такі засоби відсутні. Роздільні файли заголовків Колись великим досягненням вважалися файли заголовків, в які можна було помістити прототипи класів і розмістити їх разом з відтрансльованими двійковими файлами, що містять реальні реалізації цих класів. Підтримка цих файлів заголовків (адже вони повинні відповідати реалізації, їх версія повинна співпадати з версією класів, що зберігаються в двійкових файлах, що відтранслюють) ставала непосильною задачею у міру зростання розмірів бібліотек класів. У Java таке неможливе, оскільки в ній відсутні файли заголовків. Тип і видимість членів класу при трансляції вбудовуються всередину файлу *.class (файлу з байт-кодом). Інтерпретатор Java користується цією інформацією в процесі виконання коду, так що не існує способу отримати доступ до закритих змінних класу ззовні. Ненадійні структури С++ намагається надати програмісту можливість інкапсуляції даних за допомогою оголошення структур (struct) і поліморфізм за допомогою об'єднань (union). Ці дві конструкції прикривають критичні і катастрофічні машинно-залежні обмеження за розміром і вирівнюванням даних. У Java немає конструкцій struct і union, все це об'єднано в концепції класів. Препроцесорна обробка Робота препроцесора C++ якого полягає в пошуку спеціальних команд, що починаються з символу #. Ці команди дозволяють виконувати просту умовну трансляцію і розширення макроозначень. Java управляється з своїми задачами без допомоги препроцесора, замість прийнятого в С стилю визначення констант за допомогою директиви #define в ній використовується ключове слово final. QED Quod erat demonstrandum - латинське "що і вимагалося довести". Просто прочитавши про всі ці проблеми, навіть якщо вам ще не доводилося мати з ними справи, ви повинні бути готові зануритися в матеріал наступного розділу. Питання до лекції 1. Назвіть відмінності Java та С щодо використання глобальних змінних. 2. Яка особливість Java щодо безумовних переходів? 3. Яка особливість Java щодо використання показників? 4. Як розв’язана проблема в Java про незахищені типи даних? 5. Чому в Java не реалізовано окремі файли для заголовку класу та реалізації? 6. Як замінюється в Java пре процесорна обробка констант? ЛЕКЦІЯ 3 ВВЕДЕННЯ В МОВУ JAVA Початковий файл на мові Java - це текстовий файл, що містить в собі одне або декілька описів класів. Транслятор Java припускає, що початковий текст програм зберігається у файлах з розширеннями Java. Одержуваний в процесі трансляції код для кожного класу записується в окремому вихідному файлі, з ім'ям співпадаючому з ім'ям класу, і розширенням class. Перш за все, в цьому розділі ми напишемо, відтранслюватимемо, і запустимо канонічну програму "Hello World". Після цього ми розглянемо всі істотні лексичні елементи, сприймані Java-транслятором: пропуски, коментарі, ключові слова, ідентифікатори, літерали, оператори і роздільники. До кінця лекції ви отримаєте досить інформації для того, щоб самостійно орієнтуватися в хорошій Java-програмі. Hello World //Отже, ось ваша перша Java-програма: class HelloWorld { public static void main (String args []) { System. out. println ("Hello World"); } } Для того, щоб попрацювати з приведеними в книзі прикладами вам потрібно одержати по мережі з Sun Microsystems і встановити Java Developers Kit - пакет для розробки Java-програм (http://java.sun.com/products/jdk). Мова Java вимагає, щоб весь програмний код був вкладений всередині пойменованих класів. Приведений вище текст прикладу треба записати у файл HelloWorld.java. Обов'язково перевірте відповідність прописних букв в імені файлу тому ж в назві класу, що міститься в ньому. Для того, щоб відтранслювати цей приклад необхідно запустити транслятор Java - javac, вказавши як параметр ім'я файлу з початковим текстом: С:> javac HelloWorld.Java Транслятор створить файл HelloWorld.class з незалежним від процесора байт-кодом нашого прикладу. Для того, щоб виконати одержаний код, необхідно мати середовище часу виконання мови Java (у нашому випадку це програма java), в яку треба завантажити новий клас для виконання. Підкреслимо, що вказується ім'я класу, а не ім'я файлу, в якому цей клас міститься. С:> java HelloWorld Корисного зроблено мало, проте ми переконалися, що встановлений Java-транслятор і середовище часу виконання працюють. Крок за кроком Звичайно, HelloWorld - це тривіальний приклад. Проте навіть така проста програма новачку в мові Java може показатися складною, оскільки вона знайомить вас з масою нових понять і деталей синтаксису мови. Давайте уважно пройдемося по кожному рядку нашого першого прикладу, аналізуючи ті елементи, з яких складається Java-програма. Рядок 1 class HelloWorld { У цьому рядку використане зарезервоване слово class. Воно говорить транслятору, що ми збираємося описати новий клас. Повний опис класу розташовується між відкриваючою фігурною дужкою в першому рядку і парною їй закриваючою фігурною дужкою в рядку 5. Фігурні дужки в Java використовуються точно так, як і в мовах С і С++. Рядок 2 public static void main (String args [ ]) { Такий, на перший погляд, надмірно складний рядок прикладу є наслідком важливої вимоги, яка закладена при розробці мови Java. Річ у тому, що в Java відсутні глобальні функції. Оскільки подібні рядки зустрічатимуться в більшості прикладів першої частини книги, давайте детальніше розглянемо кожен елемент другого рядка. public Розбиваючи цей рядок на окремі лексеми, ми відразу стикаємося з ключовим словом public. Це - модифікатор доступу, який дозволяє програмісту управляти видимістю будь-якого методу і будь-якої змінної. В даному випадку модифікатор доступу public означає, що метод main видно і доступно будь-якому класу. Існують ще 2 покажчики рівня доступу - private і protected, з якими ми детальніше познайомимося наступних лекціях. static Наступне ключове слово - static. За допомогою цього слова оголошуються методи і змінні класу, використовувані для роботи з класом в цілому. Методи, в оголошенні яких використане ключове слово static, можуть безпосередньо працювати тільки з локальними і статичними змінними. void У вас нерідко виникатиме потреба в методах, які повертають значення того або іншого типу: наприклад, int для цілих значень, float - для речовинних або ім'я класу для типів даних, визначених програмістом. У нашому випадку потрібно просто вивести на екран рядок, а повертати значення з методу main не вимагається. Саме тому і був використаний модифікатор void. Детальніше це питання обговорюється на чолі 4. main Нарешті, ми дісталися до імені методу main. Тут немає нічого незвичайного, просто всі існуючі реалізації Java-інтерпретаторів, одержавши команду інтерпретувати клас, починають свою роботу з виклику методу main. Java-транслятор може відтранслювати клас, в якому немає методу main. А ось Java-інтерпретатор запускати класи без методу main не вміє. Всі параметри, які потрібно передати методу, вказуються всередині пари круглих дужок у вигляді списку елементів, розділених символами ";" (крапка з комою). Кожен елемент списку параметрів складається з розділених пропуском типу і ідентифікатора. Навіть якщо в методу немає параметрів, після його імені все одно потрібно поставити пару круглих дужок. У прикладі, який ми зараз обговорюємо, у методу main тільки один параметр, правда досить складного типу. Елемент String args[ ] оголошує параметр з ім'ям args, який є масивом об'єктів - представників класу String. Зверніть увагу на квадратні дужки, що стоять після ідентифікатора args. Вони говорять про те
Антиботан аватар за замовчуванням

10.03.2017 15:03-

Коментарі

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

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!