Введення в програмування на мові Java, Інтеграція додатків і даних, Бази даних, статті

Зміст



Про цей посібник


Про що цей посібник?


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


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


Чи потрібно мені це керівництво?


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


У цьому посібнику буде розглянута установка Java-платформи на вашій машині, установка і використання Eclipse, вільно розповсюджуваної інтегрованого середовища розробки (integrated development environment – IDE), для написання Java-коду. Ви вивчите основи програмування мовою Java (в тому числі ООП-парадигму та її застосування в Java), синтаксис і використання Java, створення об’єктів і додавання поведінки, роботу з колекціями та обробку помилок, поради щодо поліпшення коду. До кінця керівництва ви станете Java-програмістом – початківцям, але, тим не менше, Java-програмістом.


Вимоги до програмного забезпечення


Для виконання прикладів з даного керівництва необхідна наявність встановлених Java 2 Platform Standard Edition (J2SE) версії 1.4.2 або вище і Eclipse IDE. Не турбуйтеся, якщо ви ще не встановили ці пакети – ми покажемо вам, як це зробити в розділі “Початок роботи“. Всі приклади коду з даного керівництва були протестовані з J2SE 1.4.2 на Windows XP. Однак однією з чудових можливостей платформи Eclipse є те, що вона працює практично на всіх операційних системах, які ви можете використовувати, в тому числі Windows 98/ME/2000/XP, Linux, Solaris, AIX, HP-UX і навіть Mac OS X.


Початок роботи


Вказівки з установки


У наступних декількох розділах я в покроковому режимі розгляну процедуру завантаження й установки Java 2 Platform Standard Edition (J2SE) версії 1.4.2 і Eclipse IDE. Перша система дає вам можливість компілювати і виконувати Java-програми. Друга надає потужну і дружнє середовище для написання коду на мові програмування Java. Якщо Java SDK і Eclipse у вас вже встановлені, можете відразу перейти до розділу “Коротка екскурсія по Eclipse“Або до розділу”Концепції ООП“.


Установка Java SDK


Первісною метою мови Java було надання можливості для програмістів писати одну програму, яка могла б працювати на будь-якій платформі. Цю мету можна висловити афоризмом “Write Once, Run Anywhere “(написати один раз, виконувати скрізь) (WORA). Насправді все не так просто, але все йде саме до цього. Підтримують цю мету різні компоненти технології Java. Платформа Java поставляється в трьох редакціях: Standard, Enterprise і Mobile (останні дві призначені для розробки мобільних пристроїв). Ми буди працювати з J2SE, в яку входять всі основні бібліотеки Java. Все що вам потрібно – Завантажити і встановити її.


Щоб завантажити J2SE SDK (software development kit – комплект для розробки програмного забезпечення), виконайте наступні дії:



  1. Відкрийте браузер і перейдіть на сторінку Java Technology. У верхній середній частині сторінки ви побачите посилання на різні предметні області Java-технології. Виберіть J2SE (Core / Desktop).
  2. У списку поточних версій J2SE виберіть J2SE 1.4.2.
  3. У навігаційній панелі з’явилася сторінки виберіть Downloads.
  4. На даній сторінці є декілька завантажуються пакетів. Знайдіть і виберіть посилання Download J2SE SDK.
  5. Підтвердіть умови ліцензії та натисніть Continue.
  6. Ви побачите список завантажуваних пакетів для різних платформ. Виберіть відповідний пакет для вашої системи.
  7. Збережіть файл на ваш жорсткий диск.
  8. Після завершення завантаження запустіть програму установки SDK на ваш жорсткий диск, бажано в яку-небудь папку зі зручним назвою в корені диска.

Все! Тепер у вас є Java-середу. Наступний крок – установка інтегрованого середовища розробки (integrated development environment – IDE).


Установка Eclipse


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


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


Завантажити та встановити Eclipse просто. Виконайте наступні дії:



  1. Відкрийте браузер і перейдіть на Web-сайт Eclipse.
  2. Натисніть посилання Downloads в лівій частині сторінки.
  3. Натисніть посилання Main Eclipse Download Site для переходу на сторінку завантаження проекту Eclipse.
  4. Ви побачите список типів і назв версій компонування. Натисніть посилання 3.0.
  5. У середній частині сторінки ви побачите список Eclipse SDK для різних платформ; виберіть відповідну вашій платформі версію.
  6. Збережіть файл на ваш жорсткий диск.
  7. Після завершення завантаження запустіть програму установки і встановіть Eclipse на вашому жорсткому диску, бажано в каталозі зі зручним назвою в корені диска.

Все, що залишилося – це налаштувати IDE.


Налаштування Eclipse


Для використання Eclipse при написанні Java-коду ви повинні вказати Eclipse, де на вашій машині розташована платформа Java. Виконайте наступні дії:



  1. Запустіть Eclipse, виконавши подвійне клацання мишкою на файлі eclipse.exe або на еквівалентному файлі для вашої платформи.
  2. Коли з’явиться екран Welcome, натисніть посилання Go To The Workbench. Це приведе вас в так звану перспективу Resource (більш докладно про це далі).
  3. Виберіть Window>Preferences>Installed JREs, Що дозволить вам вказати місце розташування вашої Java-середовища, встановленої в системі (див. малюнок 1).

    Рис. 1. Налаштування Eclipse


  4. Eclipse знайде встановлені Java Runtime Environment (JRE), але ви повинні явно вказати одну з них, встановлену в розділі “Установка Java SDK“. Це можна зробити в діалоговому вікні Preferences. Якщо Eclipse виводить існуючу JRE, виберіть її та натисніть Edit; В іншому випадку натисніть Add.
  5. Вкажіть шлях до папки JRE JDK, який ви встановили в розділі “Установка Java SDK“.
  6. Натисніть OK.

Тепер Eclipse налаштований на компіляція і запуск Java-коду. У наступному розділі ми зробимо коротку екскурсію по середовищу Eclipse, для того щоб ви познайомилися з цією програмою.


Коротка екскурсія по Eclipse


Робота з Eclipse – це велика тема, і вона, в основному, виходить за рамки цієї статті. Тут же ми розглянемо тільки найнеобхідніше для знайомства з роботою середовища Eclipse та її використанням для Java-розробки.


Запустивши Eclipse, ви потрапляєте в перспективу Resource (Eclipse пропонує набір перспектив для вашого коду). Перспектива Resource показує вашу файлову систему у використовуваному вами робочому просторі Eclipse. У робочому просторі зберігаються всі файли, пов’язані з Eclipse-розробці. В даний час у вашому робочому просторі ще немає нічого, про що вам потрібно турбуватися.


Взагалі кажучи, Eclipse має перспективи, що містять види (view). У перспективі Resource ви побачите вид Navigator, вид Outline та ін Ви можете за бажанням переміщати ці види в будь-яку позицію на екрані. Eclipse – Це необмежено настроюється середу, хоча поки для роботи нам достатньо розміщення за умовчанням. Але те, що ми бачимо, не дозволяє нам зробити те, що ми хочемо. Першим кроком для написання Java-коду в Eclipse є створення Java-проекту. Це не конструкція мови Java; це просто конструкція Eclipse, яка дає можливість організувати ваш Java-код. Для створення Java-проекту виконайте наступні дії:



  1. Виберіть File>New>Project для відображення майстра New Project (малюнок 2). Це насправді “майстер майстрів”; іншими словами, – це майстер, який дозволяє вам вибрати майстра для використання (майстер New Project, майстер New File і т.д.).

    Рис. 2. Майстер New project


  2. Виберіть Java Project і натисніть Next.
  3. Введіть будь назва проекту (наприклад, “Intro”), залиште обраними всі налаштування за замовчуванням і натисніть Finish.
  4. Зараз Eclipse повинен запитати вас, чи бажаєте ви переключитися в перспективу Java. Натисніть No.

Ви тільки що створили Java-проект з назвою Intro, який ви повинні побачити у вигляді Navigator у верхньому лівому куті екрану. Ми не перейшли в перспективу Java після створення проекту тому, що існує більш підходяща перспектива для наших поточних цілей. Натисніть кнопку Open Perspective в панелі в верхньому правому куті вікна, потім виберіть перспективу Java Browsing. Ця перспектива показує все, що необхідно для легкого створення Java-програм. При створенні Java-коду ми розглянемо додаткові функціональні можливості Eclipse для створення, зміни та управління вашим кодом. Але перед цим необхідно розглянути деякі основні концепції об’єктно-орієнтованого програмування, що ми і зробимо в наступному розділі. А зараз завершимо цей розділ розглядом інтерактивної документації по Java.


Інтерактивна довідка по Java API


Інтерфейс прикладного програмування (application programming interface – API) Java дуже об’ємний, тому важливо вміти знаходити потрібну інформацію. Платформа Java досить велика і надає вам практично будь-інструментальне засіб, в якому ви потребуєте як програміст. Вивчення способів використання цих можливостей може зажадати стількох же зусиль, що і вивчення механізмів мови програмування.


Якщо ви перейдете на сторінку документації по Java фірми Sun (посилання наведена в розділі “Ресурси“), То побачите посилання на документацію по API для кожної версії SDK. Виберіть версію 1.4.2 для перегляду документації.


Ви побачите у вашому браузері три фрейми:



Тут присутній кожен клас в SDK. Виберіть клас HashMap. Праворуч ви побачите опис класу. У верхній частині ви побачите назву і пакет, в якому він знаходиться, його ієрархію класів, реалізовані інтерфейси (їх розгляд виходить за рамки даного керівництва) і всі прямі підкласи, які він може мати. Після всього цього йде опис класу. Іноді в опис входить приклад використання, пов’язані посилання, рекомендації по стилю і т.д. Після опису ви побачите список конструкторів, потім список всіх методів класу, всіх успадкованих методів і докладні описи всіх методів. Інформація дуже багато, тому у верхній і нижній частині правого фрейма розташований повний покажчик.


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


Концепції ООП


Що таке об’єкт?


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


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


Коли один об’єкт викликає метод іншого об’єкта, це називається передачею повідомлення. Ця фраза відповідає ГО-термінології, але найчастіше в Java-світі люди говорять “Викликати цей метод”, а не “Передати це повідомлення “. У наступному розділі ми розглянемо концептуальний приклад, який повинен прояснити все це.


Концептуальний приклад об’єкта


Припустимо, що ми маємо об’єкт Людина. Кожен об’єкт Людина має ім’я, вік, національність і стать. Кожен об’єкт Людина знає, як говорити і ходити. Один об’єкт може запитати у іншого про його вік, або може Cказали, щоб інший об’єкт почав (або закінчив) переміщення. У термінах програмування ви можете створити об’єкт Person і призначити йому деякі змінні (наприклад, ім’я та вік). Якщо ви створили другий об’єкт Person, він може запитати у першого його вік або сказати йому почати переміщення. Він може зробити це шляхом виклику методів першого об’єкта Person. Коли ми почнемо писати код на мові Java, ви побачите, як мова реалізує концепцію об’єкта.


Зазвичай концепція об’єкта залишається незмінною і в мові Java і в інших об’єктно-орієнтованих мовах програмування, хоча реалізують вони її по-різному. Ця концепція універсальна. З цієї причини об’єктно-орієнтовані програмісти, незалежно від застосовуваного ними мови, спілкуються не так, як процедурні програмісти. Процедурні програмісти часто говорять про функції та модулях. Об’єктно-орієнтовані програмісти кажуть про об’єкти і часто говорять про них, використовуючи особисті займенники. Ви часто можете почути, як один ГО-програміст говорить іншому: “Цей об’єкт Supervisor говорить тут об’єкту Employee” Дай мені свій ID “, оскільки він повинен призначити завдання для Employee”.


Процедурні програмісти можуть вважати такий спосіб мислення дивним, але він є природним для ГО-програмістів. В їх програмному світі все є об’єктом (з деякими винятками в мові Java), а програми є взаємодія (або розмова) об’єктів між собою.


Фундаментальні принципи ООП


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


Ви можете запам’ятати три фундаментальні принципи ООП за допомогою акроніма PIE (пеньки):



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


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


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


Інкапсуляція гарантує індивідуальність кожного об’єкта, а програми є спілкування між об’єктами. Мова програмування Java дозволяє програмісту порушити цей принцип, але це майже завжди є поганою ідеєю.


Спадкування


При вашому народження, говорячи з біологічної точки зору, ви були комбінацією ДНК ваших батьків. Ви не були точною копією жодного з них, але були схожі на обох. ГО використовує для об’єктів цей же принцип. Уявіть знову об’єкт Людина. Згадайте, що кожен цей об’єкт має національність. Не всі ці об’єкти мають однакову національність, але чи не є вони схожими? Звичайно! Це не Коні, або Шимпанзе, або Кити. Це об’єкт Людина. Всі об’єкти Людина мають певні спільні ознаки, що відрізняють їх від тварин інших типів. Але вони трохи відрізняються один від одного. Чи схожий Дитина на Підлітка? Ні. Вони рухаються і говорять по-різному. Але Дитина безумовно є Людиною.


У термінах ООП Людина і Дитина є класами в одній ієрархії і (найімовірніше) Дитина успадковує характеристики і поведінку від свого батька. Ми говоримо, що конкретний Дитина має тип Людина, або що цей Дитина успадковується з об’єкта Людина. Це не спрацьовує в зворотну сторону – Людина не обов’язково Дитина. Кожен об’єкт Дитина є екземпляром класу Дитина, і коли ми створюємо об’єкт Дитина, ми створюємо його екземпляр. Представляйте клас як шаблон для реалізації відповідного класу. Звичайно те, що може робити об’єкт, залежить від типу об’єкта або, іншими словами, від того, примірником якого класу він є. І Дитина, і Підліток мають тип Людина, але один може працювати, а інший ні.


У термінах Java Людина – це суперклас класів Дитина і Підліток, які є підкласами класу Людина. Ще однією концепцією, пов’язаної зі спадкуванням, є абстракція. Людина знаходиться на більш високому рівні абстракції, ніж Дитина або Підліток. Обидва вони мають тип Людина, але дещо відрізняються. Всі об’єкти Людина мають деякі загальні властивості (наприклад, ім’я та вік). Ви можете створити екземпляр класу Людина? Ні. Ви маєте або екземпляр класу Дитина, або класу Підліток. Людина, в термінах Java, є абстрактним класом. Ви не можете мати прямий екземпляр класу Людина. Тільки Дитина або Підліток, які обидва мають тип Людина, є реальними. Розгляд абстрактних класів виходить за рамки цього посібника, тому ми більше про них говорити не будемо.


Тепер, подумайте, що значить для об’єкта Дитина дію “говорити”. Ми розглянемо сенс цього в наступному розділі.


Поліморфізм


“Говорить” Чи Дитина також як Підліток? Звичайно ж, ні. Дитина видає шум, який не завжди є розпізнаваними словами, які використовують об’єкти Підліток. Тому, коли я створюю примірник об’єкта Дитина (вислів “створити екземпляр Дитину” означає те ж саме – слово “об’єкт” мається на увазі) і вказую йому “говорити”, він може воркувати або булькати. Очікується, що Підліток буде більш чіткий.


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


У чому полягає (і в чому ні) об’єктно-орієнтованість мови Java


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


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


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


Мова Java зсередини


Як працює платформа Java


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


З точки зору файлової системи при написанні коду ви створюєте файл з розширенням. Java. Після компілювання цього файлу компілятор Java створює файл з розширенням. Class, який містить байт-коди. JVM читає та інтерпретує цей файл під час виконання, і те, як вона робить це, залежить від платформи, на якій ви працюєте. Для роботи на інших платформах ви повинні відкомпілювати ваш вихідний код з бібліотеками, специфічними для цієї платформи. Як ви розумієте, обіцянка “Write Once, Run Anywhere” (написати один раз, запускати скрізь) перетворюється на вислів “Write Once, Test Anywhere” (написати один раз, перевірити скрізь). Існують тонкі (або не такі тонкі) відмінності платформ, які можуть викликати різне виконання вашого коду на різних платформах.


Збірка сміття


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


Якщо ви писали якісь програми на мові програмування C + +, який теж є (ймовірно) об’єктно-орієнтованим, то знаєте, що як програміст ви повинні розподіляти і звільняти пам’ять для ваших об’єктів явно за допомогою функцій malloc() і free(). Для програмістів це обтяжлива завдання. Вона також і небезпечна, оскільки може привести до витоку пам’яті в ваших програмах. Витік пам’яті – це ніщо інше, як ваша програма, що поглинає оперативну пам’ять із загрозливою швидкістю, що навантажує процесор машини, на якій працює ваша програма. Java-платформа звільняє вас від будь-яких занепокоєнь з цього приводу, оскільки вона має так званий складальник сміття.


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


IDE проти інструментів командного рядка


Як ми вже відзначали раніше, Java-платформа поставляється з інструментами командного рядка, які дозволяють компілювати ( javac ) і запускати ( java ) Java-програми. Так навіщо ж тоді використовувати таку IDE як Eclipse? Причина цього полягає в тому, що використання інструментів командного рядка може стати головним болем для роботи з програмами будь-якої складності. Вони є під рукою, коли необхідні, але використання IDE в більшості ситуацій є більш мудрим рішенням.


Головною причиною використання IDE є управління файлами і шляхами в самій IDE та наявність майстрів, що допомагають вам при необхідності змінити вашу середовища часу виконання. Якщо я хочу відкомпілювати Java-програму за допомогою інструменту командного рядка javac, То повинен заздалегідь потурбуватися про встановлення змінної середовища CLASSPATH, Для того щоб JRE зміг знайти мої класи, або я повинен встановити цю змінну під час компілювання. У такій IDE як Eclipse все, що я повинен зробити – це вказати Eclipse, де знайти мою JRE. Якщо мій код використовує класи, які я не написав, все що я повинен зробити – це вказати Eclipse бібліотеки, на які посилається мій код, і їх місцерозташування. Це набагато простіше, ніж використання командної рядки для введення жахливо довгих рядків, що вказують classpath.


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


ООП з використанням Java-технології


Введення


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


Ми наведемо тут достатньо інформації з поясненнями та прикладами коду, для того щоб ви змогли почати написання Java-програм і навчитися правильно застосовувати ООП в середовищі Java. Зараз це залежить тільки від практики і навчання.


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


Структура Java-об’єкта


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






package   packageName ;
import packageNameToImport ;
accessSpecifier class ClassName {
accessSpecifier
dataType
variableName [= initialValue ];

accessSpecifier ClassName (аргументи) { оператор (оператори) конструктора
}
accessSpecifier
returnValueDataType methodName (аргументи) { оператор (оператори)
}
}

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


Пакети (package)


Оголошення package йде першим при визначенні класу:






package   packageName ;

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


Наприклад, в пакеті java.util.ArrayList java – Це вузол, util – Вузол і ArrayList – Теж вузол. Останній вузол посилається на файл ArrayList.java.


Вирази import


У визначенні класу далі йдуть висловлювання import:






import   packageNameToImport ;


Коли ваш об’єкт використовує об’єкти з інших пакетів, Java-компілятор повинен знати, де їх знайти. Вирази import вказують компілятору місцерозташування використовуваних вами класів. Наприклад, якби я хотів використовувати клас ArrayList з пакету java.util, То повинен був би написати такий вираз:






import java.util.ArrayList;

Кожен вираз import закінчується крапкою з комою, як і більшість виразів у мові Java. Ви можете мати скільки завгодно виразів import для вказівки Java місцерозташування використовуваних вами класів. Наприклад, якби я хотів використовувати клас ArrayList з пакету java.util і клас BigInteger з пакету java.math, То міг би написати такі вирази:






import java.util.ArrayList;
import java.math.BigInteger;

Якщо ви імпортуєте більше одного класу з одного і того ж пакету, то можете використовувати скорочену запис. Наприклад, якби я хотів використовувати ArrayList і HashMap, Обидва з пакета java.util, Я міг би імпортувати їх наступним чином:






import java.util.*;

Ви повинні вказувати вираз import для кожного унікального пакета, з якого ви виконуєте імпорт.


Оголошення класу


Далі йде визначення класу:






   accessSpecifier  class   ClassName  {
accessSpecifier
dataType
variableName [= initialValue ];

accessSpecifier ClassName (аргументи) { оператор (оператори) конструктора
}
accessSpecifier
returnValueDataType methodName (аргументи) { оператор (оператори)
}
}

Ви визначаєте Java-об’єкт як клас. Представляйте клас як шаблон для об’єкта, приблизно як форму для печива. Клас визначає тип об’єкта, який ви можете створити з його допомогою. Ви можете наштампувати будь-яку кількість об’єктів цього типу. Коли ви робите це, то створюєте екземпляр класу. Примітка: Слово об’єкт зазвичай використовується взаємозамінне як для посилання на клас, так і для посилання на екземпляр класу.


Специфікатор доступу (accessSpecifier) ​​для класу може мати кілька значень, але найчастіше він встановлюється в значення public (відкритий), і ми будемо розглядати в цьому посібнику тільки його. Назвати клас ви можете як завгодно, але за угодою імена класів починаються з великої літери, і з великої літери починається також кожне наступне слово в імені.


Класи мають два типи членів: змінні (або дані-члени) і методи. Всі члени класу визначені в тілі класу, яке знаходиться всередині одного набору фігурних дужок для класу.


Змінні


Значення змінних класу є тим, чим відрізняється кожен екземпляр класу. Ось чому їх часто називають змінними екземпляра. Змінна має специфікатор доступу, тип даних, ім’я та (не обов’язково) початкове значення. Ось список специфікаторів доступу і їх значень:



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


Методи


Методи класу визначають, що він може робити. Є два типи методів у мові Java:



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


Конструктори


Конструктори дозволяють вам вказати, як створювати екземпляр класу. Конструктор оголошується наступним чином:






 accessSpecifier ClassName (аргументи) { оператор (оператори) конструктора
}

Ви завжди маєте конструктор за замовчуванням (не має аргументів) для кожного класу, який створюєте. Ви навіть не повинні визначати його. Конструктори відрізняються від інших методів тим, що не мають типу повертаються даних, оскільки повертається тип даних власне і є класом. Конструктор викликається наступним чином:






ClassName variableHoldingAnInstanceOfClassName = new ClassName (аргументи);

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


Інші методи


Рештою методами в мові Java ви будете користуватися найчастіше. Оголошуються вони наступним чином:






   accessSpecifier
returnValueDataType methodName (аргументи) { оператор (оператори)
}

Кожен метод має тип повертаються даних, але не кожен метод повертає небудь. Якщо метод нічого не повертає, як повертається типу використовується ключове слово void. Ви можете назвати метод як хочете, якщо ця назва є коректним ідентифікатором (наприклад, він не може починатися з точки (.)), Але за угодою імена методів:



Методи викликаються наступним чином:






returnType variableForReturnValue = instanceOfSomeClass.methodName(parameter1, parameter2, …);

Тут, ми викликаємо methodName() об’єкту instanceOfSomeClass і передаємо кілька аргументів. Відмінності між параметрами та аргументами не великі, але вони є. Метод приймає параметри. Коли ви передаєте конкретні значення в викликається метод, ці значення є аргументами виклику.


Ваш перший Java-об’єкт


Створення пакету


Перейдіть в перспективу Java Browsing в Eclipse, якщо вже не перебуваєте в ній. Ми збираємося створити перший Java-клас. Першим кроком є ​​створення місця, де буде розміщуватися клас.


Замість використання пакета за замовчуванням давайте створимо один конкретно для проекту Intro. Виберіть File>New>Package. При цьому повинен відобразитися майстер Package (див. малюнок 3).

Рис. 3. Майстер Package


Введіть intro.core як ім’я пакета та натисніть Finish. У робочій області ви повинні побачити наступний пакет у вигляді Packages:






intro.core

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


Оголошення класу


Ви можете створити Java-клас в Eclipse, вибравши File>New, Але ми замість цього будемо використовувати панель інструментів. Подивіться на верхню частину виду Packages і знайдіть інструменти для створення проектів, пакетів і класів. Натисніть кнопку New Java Class (зелена буква “C”) для відображення майстра New Java Class. Введіть Adult як ім’я класу і прийміть всі значення за замовчуванням, натиснувши Finish. Тепер ви повинні побачити кілька змін:



Зараз клас виглядає наступним чином:






package intro.core;
public class Adult {
}

Eclipse генерує оболонку або шаблон для класу за вас і вставляє оператор package зверху. Поки тіло класу пусте. Ми просто повинні додати в нього чогось. Ви можете налаштувати шаблони для нових класів, методів і т.д. в майстрі Preferences, який використовували раніше (Window>Preferences). Можна налаштувати шаблони коду в Java>Code Style>Code Templates. Фактично для спрощення відображення коду я збираюся видалити всі коментарі з шаблонів, тобто, всі наступні рядки: починаються з / / Коментарі , Оточені символами / * Коментарі * /, Оточені символами / ** Коментарі * /. З цього моменту ви не побачите будь-яких коментарів в коді до тих пір, поки ми спеціально не обговоримо їх застосування, що буде зроблено в наступному розділі.


Однак перш ніж продовжити, давайте продемонструємо спосіб роботи в Eclipse IDE, який полегшує життя. В редакторі змініть слово class на clas і зачекайте кілька секунд. Зверніть увагу на те, що Eclipse підкреслить його червоною хвилястою лінією. Якщо ви помістіть над нею вказівник, Eclipse відобразить інформаційне вікно, яке попереджає вас про наявність синтаксичної помилки. Eclipse допомагає вам, періодично компілюючи ваш код і ненав’язливо попереджаючи вас про наявність проблеми. Якщо б ви використовували програму командного рядка javac, То повинні були б спочатку відкомпілювати код і почекати відображення помилки. Це може сильно уповільнити процес розробки. Eclipse усуває цю проблему.


Коментарі


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






/ / Коментар в одному рядку. Компілятор ігнорує будь-який текст, наступний за двома прямими косими рисами.  / * Коментар в декількох рядках. Компілятор ігнорує будь-який текст, розташований між зірочками. * / / ** Коментар в стилі javadoc. Компілятор ігнорує текст, розташований між зірочками, а програма  javadoc використовує його. * /

Останній варіант найбільш цікавий. У двох словах, javadoc – Це програма, що поставляється разом з дистрибутивом Java SDK, яка може допомогти вам згенерувати HTML-документ для вашого коду. Ви можете згенерувати документацію для ваших власних класів, яка виглядає майже так само, як і інтерактивна документація по Java API. Якщо ви закомментіруете ваш код відповідним чином, то зможете виконати програму javadoc з командного рядка. Ви можете знайти інструкції та всю доступну інформацію по javadoc на Web-сайті Java Technology.


Зарезервовані слова


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


















































































abstract  boolean  break  byte 
case  catch  char  class 
const  continue  char  class 
default  do  double  else 
extend  false  final  finally 
float  for  goto  if 
implements  import  int  instanceof 
interface  long  int  native 
new  null  package  private 
protected  public  package  private 
static  strictfp  super  switch 
synchronized  short  super  this 
throw  throws  true  try 
transient  return  void  volatile 
while  assert  true  false 
null 

 

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


Тепер трохи реального коду.


Додавання змінних


Як я говорив раніше, примірник Adult знає своє ім’я, вік, національність і стать. Ми можемо додати ці дані до нашого класу Adult, Оголошуючи їх як змінні. Тоді кожен екземпляр класу Adult буде містити їх. Найімовірніше, кожен екземпляр Adult буде мати різні значення цих змінних. Ось чому змінні кожного об’єкта часто називаються змінними примірника – вони різні для кожного екземпляра класу. Давайте додамо їх, використовуючи в якості специфікатора доступу ключове слово protected:






package intro.core;
public class Adult {
protected int age;
protected String name;
protected String race;
protected String gender;
}

Тепер кожен екземпляр Adult буде містити ці дані. Зверніть увагу на те, що кожен рядок коду закінчується крапкою з комою. Ця вимога мови Java. Також зазначимо, що кожна змінна має тип даних. У нас є одне целочисленная і три строкових змінних. Типи даних для змінних можуть бути однією з двох різновидів:



Примітивні типи даних


Існує дев’ять примітивних типів даних, з якими ви, найімовірніше, регулярно будете стикатися:

















































Тип 

Розмір 

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

Приклад 

boolean  N/A false  true 
byte  8 bits 0  2 
char  16 bits “u/0000”  “a” 
short  16 bits 0  12 
int  32 bits 0  123 
long  64 bits 0  9999999 
float  32 біт з десятковою крапкою 0.0  123.45 
double  64 біт з десятковою крапкою 0.0  999999999.99999999 

Ми використовували int для змінної age, Тому що нам не потрібні десяткові значення, а тип int досить великий для зберігання будь-якого реального віку людини. Ми використовували String для інших трьох змінних, оскільки вони не є цифровими. String – Це клас з пакету java.lang, До якого ви можете звернутися в своєму Java-коді автоматично в будь-який час (ми поговоримо про це докладніше в розділі “Рядки“). Ви можете оголосити також і певний користувачем тип змінних, наприклад Adult.


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






   accessSpecifier dataType variableName1,
variableName2,
variableName3 ,…

Якщо б ми захотіли ініціалізувати ці змінні при їх оголошенні, то могли б просто додати ініціалізацію після кожної назви змінної:






   accessSpecifier dataType variableName1  =   initialValue,
variableName2 = initialValue, …

Тепер наш клас знає про себе, і ми можемо довести це, що і зробимо в наступному розділі.


Метод main ()


Існує спеціальний метод, який ви можете включити в будь-який клас, для того щоб JRE міг виконати код. Він називається main(). Кожен клас може мати тільки один метод main(). Природно, не кожен клас буде його мати, але оскільки Adult – Це єдиний клас, який поки у нас є, додамо до нього метод main(), Для того щоб можна було створити екземпляр класу Adult і перевірити його змінні екземпляра:






package intro.core;
public class Adult {
protected int age;
protected String name;
protected String race;
protected String gender;

public static void main(String[] args) {
Adult myAdult = new Adult();

System.out.println(“Name: ” + myAdult.name);
System.out.println(“Age: ” + myAdult.age);
System.out.println(“Race: ” + myAdult.race);
System.out.println(“Gender: ” + myAdult.gender);
}
}


У тілі методу main() ми створили екземпляр класу Adult, Потім роздрукували значення змінних екземпляра. Подивіться на перший рядок. Це та ситуація, коли прихильники об’єктно-орієнтованого коду критикують мову Java. Вони кажуть, що new повинен бути методом Adult, І ви, відповідно, повинні викликати його так: Adult.new(). Я, безумовно, приймаю їх точку зору, але мова Java не працює таким способом, і це один з випадків, коли прихильники ООП можуть справедливо заявляти, що це не чистий об’єктно-орієнтована код. Знову подивіться на перший рядок. Згадайте, що кожен Java-клас має конструктор за умовчанням, який ми тут і використали.


Після створення екземпляра Adult ми зберігаємо його в локальній змінній під назвою myAdult. Потім роздруковуємо значення його змінних екземпляра. Майже в кожній мові програмування ви можете роздрукувати щось на консоль. Мова Java не виняток. В Java ви робите це за допомогою виклику методу println() потоку out об’єкту System. Не турбуйтеся про те, що поки не розумієте подробиць процесу. Просто знайте, що ми використовуємо допоміжний метод для виведення інформації. У кожному виклику ми передаємо рядок символів і з’єднуємо її зі значенням змінної примірника myAdult. Ми розглянемо цей метод докладно пізніше.


Виконання коду в Eclipse


Для виконання цього коду вам залишилося зробити в Eclipse зовсім небагато. Виберіть клас Adult у вигляді Types і натисніть на піктограму “біжить” в панелі інструментів. Повинно з’явитися діалогове вікно Run, яке дозволить вам створити конфігурацію для запуску вашої програми. Виберіть Java Application як тип конфігурації, яку ви хочете створити, і натисніть New. Eclipse вкаже “Adult” як ім’я за умовчанням для конфігурації, що нам підходить. Натисніть Run для перегляду результатів. Eclipse відобразить вид Console нижче редактора коду; вона повинна виглядати приблизно так, як показано на малюнку 5.

Рис. 5. Результати виконання програми


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



















Мінлива  Значення 
name  “Bob” 
age  25 
race  “inuit” 
gender  “male” 

Запустіть код повторно, натиснувши на піктограму “біжить”. Ви повинні побачити на консолі нові значення.


Тепер зробимо наш об’єкт Adult здатним розповісти іншим об’єктам про своїх даних.


Додавання поведінки


Методи доступу (accessor)


Перегляд вмісту нашого об’єкта Adult за допомогою прямих посилань на змінні був зручний, але зазвичай це не дуже добре, коли інший об’єкт може копатися в нутрощах іншого подібним чином. Це порушує принцип інкапсуляції, про який ми говорили раніше, і дозволяє одному об’єкту втручатися у внутрішній стан іншого об’єкту. Більш розумним підходом є надання можливості одному об’єкту розповісти іншим об’єктам про значення своїх змінних екземпляра за запитом. Для цього використовуються методи доступу (accessor).


Методи доступу аналогічні всім іншим методам, але вони зазвичай дотримуються спеціальних угод по найменуванню. Для надання значення змінній примірника іншому об’єкту створіть метод з назвою getVariableName (). Таким же чином для дозволу іншим об’єктам установки значень змінних екземпляра створіть метод з назвою setVariableName ().


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


Ось деякі загальні характеристики методів getter і setter:



Оголошення методів доступу


Ми можемо додати методи доступу для змінної примірника age об’єкту Adult наступним чином:






public int getAge() {
return age;
}
public void setAge(int anAge) {
age = anAge;
}

Метод getAge() повертає значення змінної age за допомогою ключового слова return. У методах, які не повертають результат, останнім оператором є return void;. В даному методі getter ми посилаємося на age по її імені.


Ми також могли використовувати оператор return this.age;. Мінлива this посилається на поточний об’єкт. Вона мається на увазі, коли ви посилаєтеся на змінну примірника безпосередньо. Деякі ОО-програмісти зі світу Smalltalk воліють використовувати this завжди, коли посилаються на змінну примірника, точно так само, як вони використовували ключове слово self при кодуванні в Smalltalk. Я і сам люблю так чинити, але в мові Java це не потрібно (і при цьому на екран додається додаткова інформація), тому в прикладах цього посібника ми не будемо використовувати цей прийом до тих пір, поки код без нього стане менш зрозумілим.


Виклик методів


Тепер, коли у нас є методи доступу, ми повинні замінити прямий доступ до змінної age у нашому методі main() на виклик методу. main() тепер повинен виглядати наступним чином:






public static void main(String[] args) {
Adult myAdult = new Adult();
System.out.println(“Name: ” + myAdult.name);
System.out.println(“Age: ” + myAdult.getAge());
System.out.println(“Race: ” + myAdult.race);
System.out.println(“Gender: ” + myAdult.gender);
}

Якщо ви виконаєте цей код знову, результати повинні бути такими ж, що й раніше. Зверніть увагу на те, що викликати метод об’єкта легко. Використовуйте наступну форму:






   instanceName.methodName()

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


Пару слів про метод setter перед продовженням роботи: Він приймає параметр int з назвою anAge. Потім присвоює значення цього параметра змінної примірника age. Ми могли б назвати параметр як завгодно. Ім’я не важливо, але, використовуючи цей параметр всередині методу, ви повинні застосовувати саме вказане вами ім’я.


Перед продовженням роботи давайте спробуємо використовувати метод setter. Додайте наступний рядок в метод main() відразу після створення екземпляра Adult:






myAdult.setAge(35);

Тепер виконаємо код знову. Результат повинен бути рівний 35. Ось що відбувалося за лаштунками:



Методи, які не є методами доступу


Методи доступу корисні, але ми хочемо, щоб наші об’єкти Adult могли виконувати що-небудь ще, окрім як використовувати спільно з іншими свої дані, тому ми повинні додати інші методи. Ми хочемо, щоб наш об’єкт Adult міг щось сказати, тому давайте створимо зараз метод speak():






public String speak() {
return “hello”;
}

Поки синтаксис повинен бути вам знаком. Метод повертає рядок символів. Давайте використаємо його і очистимо метод main(). Змініть перший виклик println() на:

Схожі статті:


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

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*