Основи програмування на Java. Мова програмування Java.


Основи програмування на Java. Мова програмування Java.

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

Історія і структура мови програмування Java

1.1 Історія Java

Сьогодні технологія Java надає можливості для перетворення статичних Web-сторінок в інтерактивні динамічні документи і для створення розподілених що не залежать від платформи додатків.  Спочатку ж мова Java корпорації Sun призначався для пристроїв побутової електроніки, і в деяких з них ще може використовуватися його ранній варіант, відомий під назвою Oak.  Однак справжньою стартовим майданчиком для стрімкого злету Java стала мережа Internet.
Деякі вважають, що для успіху будь-якої справи, перш за все, необхідно продумати і чітко поставити завдання.  Однак, цілком очевидно, що у випадку з мовою програмування Java компанії Sun Micro systems завдання виявилося вирішеною до того, як її сформулювали.
Творець Java Джеймс Гослінг вважає, що генезис цієї технології можна простежити з початку 1991 року, коли для вивчення перспектив на ринку побутової електроніки в компанії Sun була створена невелика група інженерів.  У той час мережа World Wide Web існувала тільки в проектах.
Споживачі проти інженерів
 "Групі була поставлена ​​задача створити розподілену систему, яку можна було б в якості сучасної програмної технології продавати виробникам побутової електроніки", - згадує Гослінг.
Гослінг, якому зараз 40 з невеликим років, перейшов в Sun в 1984 р з дослідницького відділу IBM.  Його перша робота - цікава технічно, але не мала комерційного успіху віконний інтерфейс NeWS.  Він також написав GOSMACS - першу реалізацію текстового редактора EMACS на мові С.

Ця діяльність в області побутової електроніки (яка потім стала називатися проектом "Green") показала Гослінгу і його колегам, як важливі для споживача такі показники, як надійність, вартість, відповідність стандартам і простота.  Якщо користувачі робочих станцій зацікавлені в великої потужності і терпимі до високих цін, необхідності тривалого навчання і наявності різних помилок, то рядовим споживачам потрібні дешеві, відносно прості і надійні пристрої.
Щоб успішно конкурувати на ринку побутової електроніки, компанії повинні розглядати процесори як звичайний товар, який в будь-який момент можна замінити більш дешевим, а також забезпечувати сумісність і дотримуватися стандартів, що встановилися на пристрої тривалого користування типу тостерів і телевізорів.

На початку була мова програмування С ++

Щоб не пов'язувати розробку з конкретною платформою, Гослінг почав з розширення компілятора С ++.  Згодом, однак, він зрозумів, що один С ++, як його ні розширюй, не зможе задовольнити всі потреби.  Тому в середині 1991 року було задуманий мову Oak.  (Згодом при пошуку торгової марки його назва була замінена на Java).  "Врешті-решт, мова - це засіб, а не самоціль, - пояснює Гослінг. - Ми не збиралися зациклюватися на С ++, а хотіли розробити систему, яка дозволяла б створювати велику розподілену різнорідну мережу з побутових електронних пристроїв, здатних взаємодіяти між собою  ".
В кінці 1992 року, зробивши, за висловом тодішнього інженера проекту Патріка Нотона, "величезні зусилля з доопрацювання Oak і інших компонентів", колектив проекту "Green" випустив "* 7" - пристрій типу PDA, назване Гослінгом "ручним пультом дистанційного керування".
 "За півтора року ми зробили стільки ж, скільки інші великі колективи в Sun робили за три роки, - з гордістю відзначає Нотон. - Операційну систему GreenOS, мова, інструментарій, призначений для користувача інтерфейс, нову апаратну платформу, три замовних мікросхеми ... і кожен  етап був пов'язаний з ризиком, тому що ми використовували абсолютно нові технології ".

Малогабаритність пристрої * 7 вигідно підкреслювала компактність і ефективність коду, що був ядром технології.  Цей продукт широко демонструвався в Sun і справив враження на таких важливих персон, як Скотт Макнілі і Білл Джой, однак його подальша доля залишалася незрозумілою.

Конкурс на розробку

Поки колектив працював над Oak і * 7, два його члена - фахівець з обладнання і технології Ед Френк і фахівець з планування бізнесу Майк Шерідан - підготували приблизну ділову і технологічну програму, якої могла б скористатися будь-яка стороння компанія типу Dolby Labs, щоб створити  і ліцензувати технологію, і помістила б логотип Sun на побутову електроніку разом зі своїм.  На час появи демонстраційної моделі * 7 були готові кілька версій цієї програми.  Однак на початку 1993 року, коли в Sun аналізувалися можливості застосування Java, колектив проекту Green, перетворений до цього моменту в компанію FirstPerson, дізнався про оголошений компанією Time-Warner конкурсі на розробку операційної системи для телевізійних приставок і технології "відео за запитом".  "Це було те, що треба", - згадує Гослінг.

FirstPerson швидко переорієнтувалася на ринок ОС для телеприставок і зробила Time-Warner пропозицію.  Однак вона була відкинута, на думку Гослінга і Нотона, чисто з політичних міркувань, хоча її технологія була визнана кращою.
FirstPerson продовжувала працювати над телеприставки до початку 1994 року, коли її колектив прийшов до висновку про безперспективність цього ринку.  "Було багато абсолютно необгрунтованої реклами", - пояснює Гослінг.  Ряд недавніх подій показав, що і зараз ринок інтерактивного ТВ ще не сформувався.
Тоді Нотон зумів довести необхідність згортання робіт над телеприставки і концентрації зусиль в області онлайнових служб, CD-ROM і платформ для настільних систем.  FirstPerson була розпущена, і близько половини її співробітників пішло в компанію Sun Interactive, де вони стали займатися розробкою серверів цифрових відеоданих.  Але деякі з них як і раніше намагалися знайти шляхи застосування технології Java в об'єднаних в мережу настільних системах.

Звернення до Web

До середини 1994 року мережа World Wide Web виглядала вже цілком солідно.  "Ми зрозуміли, що зможемо створити дійсно першокласний браузер, - каже Гослінг. - Це один з небагатьох компонентів архітектури клієнт-сервер, який ми могли б наділити такими необхідними йому якостями, як незалежність від архітектури, робота в реальному часі, надійність, безпеку,  не мають такого значення для робочих станцій. Тому ми і розробили браузер ".
До осені Нотон і його колега по Sun Джонатан Пейн закінчили писати Web Runner - Web-браузер, написаний на мові Java.  Ця перша реалізація Hot Java проявила Java-технологію в новому світлі, і ця демонстрація справила враження на директора підрозділу Sun Labs Берта Сазерленда і головного технолога Sun Еріка Шмідта.

Що все це означає?

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

Гослінг вважає, що технологія Java змусить людей переосмислити роль обчислень клієнт-сервер.  "У стандартній моделі ви маєте певні бази даних, пишете пакети клієнтського ПЗ, що взаємодіє з ними, і створюєте якийсь інтерфейс".  В рамках цієї моделі важко створювати розподілені системи і здійснювати їх модернізацію, особливо якщо їх частини мають різне походження, вказує Гослінг.
Маючи ж такі інструментальні засоби як Java і Web, ви отримуєте від початку організовану систему, підкреслює він.  "Якщо ви створюєте на мові Java клієнтську частину програми, то його запуск зводиться просто до переходу на відповідну сторінку. Інсталяція тривіальна - просто помістіть необхідне ПО на Web-сервер. І ніяких проблем з перенесенням, оскільки є тільки одна версія додатка".  Багато компаній, за словами Гослінга, вже організовують бази даних у вигляді Web-сторінок з використанням інтерфейсу Common Gateway Interface (CGI) - специфічного стандарту для роботи зовнішніх програм на сервері HTTP [7].
версії

Принципи

Було 5 основних цілей при створенні мови Java

  1. Це повинно бути "простим, об'єктно-орієнтованим і знайомим";
  2. Це повинно бути "надійним і безпечним";
  3. Це повинно бути "архітектно-нейтральним і портативним";
  4. Це повинно виконуватися з "високою продуктивністю";
  5. Це повинно бути "інтерпретується ідінамічним".

1.2 Об'єктно-орієнтоване програмування (ООП)

Мова програмування java

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

Основні поняття

Абстракція

Абстрагування - це спосіб виділити набір значущих характеристик об'єкта, виключаючи з розгляду незначущі.  Відповідно, абстракція - це набір всіх таких характеристик.

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

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

Спадкування

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

Поліморфізм

Поліморфізм - це властивість системи використовувати об'єкти з однаковим інтерфейсом без інформації про тип і внутрішню структуру об'єкта.

Клас

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

Об'єкт

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

Прототип

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

Визначення ООП і його основні концепції

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

Поля даних

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

Методи

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

Інкапсуляція забезпечується наступними засобами:

Контроль доступу

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

Методи доступу

Поля класу, в загальному випадку, не повинні бути доступні ззовні, оскільки такий доступ дозволив би довільним чином змінювати внутрішній стан об'єктів.  Тому поля зазвичай оголошуються прихованими (або мова в принципі не дозволяє звертатися до полів класу ззовні), а для доступу до знаходяться в полях даними використовуються спеціальні методи, звані методами доступу.  Такі методи або повертають значення того чи іншого поля, або роблять запис в це поле нового значення.  При записи метод доступу може проконтролювати допустимість записується значення і, при необхідності, провести інші маніпуляції з даними об'єкта, щоб вони залишилися коректними (внутрішньо узгодженими).  Методи доступу називають ще аксессор (від англ. Access - доступ), а окремо - Геттера (англ. Get - читання) і сетерами (англ. Set - запис).

Властивості об'єкта

Псевдо поля, доступні для читання і / або запису.  Властивості зовні виглядають як поля і використовуються аналогічно доступним полях (з деякими винятками), однак фактично при зверненні до них відбувається виклик методів доступу.  Таким чином, властивості можна розглядати як «розумні» поля даних, які супроводжують доступ до внутрішніх даних об'єкта будь-якими додатковими діями (наприклад, коли зміна координати об'єкта супроводжується його перемальовуванням на новому місці).

Властивості, по суті - не більше ніж синтаксичний цукор, оскільки ніяких нових можливостей вони не додають, а лише приховують виклик методів доступу.  Конкретна мовна реалізація властивостей може бути різною.  Наприклад, в C # оголошення властивості безпосередньо містить код методів доступу, який викликається тільки при роботі з властивостями, тобто не вимагає окремих методів доступу, доступних для безпосереднього виклику.  У Delphi оголошення властивості містить лише імена методів доступу, які повинні викликатися при зверненні до полю.  Самі методи доступу є звичайні методи з деякими додатковими вимогами до сигнатурі.
Поліморфізм реалізується шляхом введення в мову правил, згідно з якими змінної типу «клас» може бути присвоєно об'єкт будь-якого класу-нащадка її класу.

1.3 Структура і особливості Java

Основні особливості

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

За даними сайту shootout.alioth.debian.org, для семи різних завдань час виконання на Java становить в середньому в півтора-два рази більше, ніж для C / C ++, в деяких випадках Java швидше, а в окремих випадках в 7 разів повільніше.  З іншого боку, для більшості з них споживання пам'яті Java-машиною було в 10-30 разів більше, ніж програмою на C / C ++.  Також примітно дослідження, проведене компанією Google, згідно з яким відзначається істотно нижча продуктивність і більше споживання пам'яті в тестових прикладах на Java в порівнянні з аналогічними програмами на C ++.

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

Основні можливості

Примітивні типи

Тип

Довжина (в байтах)

Діапазон або набір значень

boolean

1 в масивах, 4 в змінних

true, false

byte

1

−128..127

char

2

0..216−1, або 0..65535

short

2

−215..215−1, або −32768..32767

int

4

−231..231−1, або −2147483648..2147483647

long

8

−263..263−1, або приблизно −9.2·1018..9.2·1018

float

4

-(2-2−23)·2127..(2-2−23)·2127, або приблизно −3.4·1038..3.4·1038, а також -∞, ∞ , NaN

double

8

-(2-2−52)·21023..(2-2−52)·21023, або приблизно −1.8·10308..1.8·10308, а також-∞, ∞ , NaN

Тип

Довжина (в байтах)

Діапазон або набір значень

boolean

1 в масивах, 4 в змінних

true, false

byte

1

−128..127

char

2

0..216−1, або 0..65535

short

2

−215..215−1, або −32768..32767

int

4

−231..231−1, або −2147483648..2147483647

long

8

−263..263−1, або приблизно −9.2·1018..9.2·1018

float

4

-(2-2−23)·2127..(2-2−23)·2127, або приблизно −3.4·1038..3.4·1038, а також -∞, ∞ , NaN

double

8

-(2-2−52)·21023..(2-2−52)·21023, або приблизно −1.8·10308..1.8·10308, а також-∞, ∞ , NaN

 

Класи і функції

Java не є процедурним мовою: будь-яка функція може існувати тільки всередині класу.  Це підкреслює термінологія мови Java, де немає понять «функція» або «функція-член» (англ. Member function), а тільки метод.  В методи перетворилися і стандартні функції.  Наприклад, в Java немає функції sin (), а є метод Math.sin () класу Math (що містить, крім sin (), методи cos (), exp (), sqrt (), abs () і багато інших).

Абстрактність

В Java методи, які не оголошені явно як static, final або private, є віртуальними в термінології C ++: при виклику методу, по-різному певного в базовому і спадщини класах, завжди проводиться перевірка часу виконання.
Абстрактним методом (модифікатор abstract) в Java називається метод, для якого задані параметри і тип значення, що повертається, але не тіло.  Абстрактний метод визначається в класах-спадкоємців.  У C ++ те ж саме називається чисто віртуальної функцією.  Для того щоб в класі можна було описувати абстрактні методи, сам клас теж повинен бути описаний як абстрактний.  Об'єкти абстрактного класу створювати не можна.

Інтерфейси

Вищим ступенем абстрактності в Java є інтерфейс (interface).  Всі методи інтерфейсу абстрактні: описувач abstract навіть не потрібно.  Інтерфейс в Java не вважається класом, хоча, по суті, є повністю абстрактним класом.  Клас може успадковувати / розширювати (extends) інший клас або реалізовувати (implements) інтерфейс.  Крім того, інтерфейс може успадковувати / розширювати інший інтерфейс.
В Java клас не може успадковувати більше одного класу, зате може реалізовувати скільки завгодно інтерфейсів.  Множинне спадкування інтерфейсів не заборонено, то є один інтерфейс може успадковуватися від декількох.

Інтерфейси можна передавати методам як параметри, але не можна створювати екземпляри інтерфейсів.

Приклад програми

Програма, що виводить «Hello, world!»:

System.out.println("Hello, world!");

public class HelloWorld {

 public static void main(String[] args) {

}

}

 

 

 

Бібліотеки класів

 

 

Засоби розробки програмного забезпечення

 

 

Частина 2. Застосування і значення Java

 

2.1 Застосування

 

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