Skip to content

1. Вступ

1.1. Contexte

PDF у документі можна знайти |TYT|.

Приклади з документа доступні за посиланням |TYT|.

Цей документ є одночасно навчальним курсом та університетським TD (практичним заняттям). Він призначений для початківців. У ньому використовуються такі джерела:

Література:

  1. Вступ до мови Java (1998);
  1. Робота з реляційною базою даних за допомогою екосистеми Spring (2015);

Ці джерела ми позначимо відповідно як [ref1] та [ref2]. Джерело [ref1] є застарілим (2002 р.), але цілком достатнім для цього документа, де воно використовується лише для викладу синтаксису мови Java та її елементарних операцій. Решта матеріалів, необхідних для реалізації TD, представлена в цьому документі в розділах під назвою [Cours]. Ці розділи взяті безпосередньо з [ref2] (2015) і в деяких випадках були спрощені.

Метою цього документа є викладання мови Java з професійної точки зору. З цієї причини ми широко спираємося на фреймворк Spring [http://spring.io/], який широко використовується у розробці JEE (Java Enterprise Edition). Логічно, що за цим курсом має слідувати курс JEE. Так відбувається в Istia (університет Анже). JEE є основним джерелом працевлаштування на даний момент (листопад 2015 року) для молодих розробників із вищою освітою (Bac+5). У світі JEE існує багато інших технологій, окрім Spring. Перевага Spring полягає в тому, що він є зрозумілим і, що найголовніше, пропонує передові практики кодування, які можна використовувати поза екосистемою Spring. Саме це пояснює його вибір у даному курсі.

Цей TD використовується вже понад 10 років і розвивався разом із технологіями. За ним (IstiA) йдуть TD, JEE та [Introduction à Java EE]. Останній TD датується 2012 роком (зараз 2015 рік) і потребує оновлення. У ньому представлено підхід JEE через веб-фреймворк JSF2 (Java Server Faces) та EJB3 (Enterprise Java Bean). У сукупності ці два TD дали змогу багатьом студентам пройти стажування JEE у ESN (компаніях, що надають цифрові послуги) та одразу ж влаштуватися там на роботу.

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

Фрагменти коду не дають загального уявлення про архітектуру рішення, і одна з цілей цього документа — саме надати таке уявлення. Студенти виконують завдання TD так само, як і TP, самостійно. Лекцій немає. Існує графік, який визначає очікуваний рівень прогресу студентів упродовж занять. Вони можуть відставати від цього графіка або випереджати його. Їхній прогрес перевіряється за допомогою низки завдань, які вони повинні представити викладачеві. Викладач присутній як для того, щоб надавати пояснення на запит студентів, так і для перевірки їхньої роботи. Кожен працює у своєму темпі. Наприкінці 36 годин, відведених на цей курс TD, дехто виконає на 50 % більше завдань, ніж інші, але кожен — принаймні така мета — зрозуміє, що саме він зробив самостійно. Цей TD можна пройти без супроводу викладача. Саме тому він доступний на [https://stahe.github.io].

Цей документ не підійде тим, хто шукає академічний курс з Java — такий, де мова Java пояснюється поступово та структуровано, а кожна деталь синтаксису роз’яснюється й обґрунтовується. Тут пропонується скоріше експериментальний підхід. Ймовірно, студент не зрозуміє всього, що пропонується в цьому документі, але, ймовірно, зможе раціонально використовувати його зміст, а розуміння деталей прийде з досвідом.

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

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

1.2. Contenu

У розділі 2 розглядається тема TD — підрахунок результатів виборів. Завдання є базовим. У розділі 2 пропонується реалізувати рішення двома мовами програмування — C# та Java, які є дуже схожими. Реалізація здійснюється без використання класів. Мета полягає у ознайомленні з синтаксисом Java, її базовими операторами, а також з IDE (Integrated Development Environment) Eclipse, що використовується для створення Java-проектів.

У розділі 3 пропонується реалізувати рішення з розділу TD на Java з використанням класів. Мета полягає в ознайомленні з поняттями класів, успадкування, інтерфейсів та генеричних класів. Вводиться поняття модульного тестування JUnit.

У розділі 4 представлені концепції, що лежать в основі наступних розділів:

  • шаруваті архітектури;
  • програмування за допомогою інтерфейсів;
  • використання Spring для реалізації двох попередніх концепцій;

Image

У розділі 5 представлено фреймворк Spring на прикладі чотирьох проєктів.

У розділі 6 представлено API JDBC — інтерфейс доступу до баз даних.

У розділі 7 реалізовано рівень [DAO] (Data Access Object) фреймворку TD за допомогою API JDBC та Spring.

Image

У розділі 8 реалізовано рівень [métier] на основі TD:

Image

У розділі 9 реалізовано рівень [ui] з TD за допомогою консольного додатка:

Image

У розділі 10 реалізовано рівень [ui] з TD за допомогою графічного додатка, що використовує бібліотеку компонентів Swing:

Image

Image

У розділі 11 розглядається управління базами даних за допомогою фреймворку [Spring Data], який є гілкою екосистеми Spring. У ній представлено специфікацію JPA (Java Persistence API), яка дозволяє шару [DAO] оперувати об’єктами замість оперування SQL (Structured Query Language). Архітектура, що складається з декількох рівнів, розвивається наступним чином:

Image

У розділі 12 застосовуються знання з розділу 11 шляхом реалізації доступу до бази даних TD за допомогою [Spring Data].

У розділі 13 показано, як оприлюднити базу даних у мережі за допомогою [Spring MVC], що є ще однією гілкою екосистеми Spring. Архітектура розвивається у архітектуру «клієнт/сервер»:

Image

У розділах 14 та 15 додаток TD перетворюється на клієнт-серверний додаток:

Image

У розділі 16 показано, як забезпечити безпечний доступ до веб-додатку за допомогою [Spring Security] — ще однієї гілки екосистеми Spring.

Image

У розділі 17 розглядається TD та забезпечується безпека веб-сервісу для проведення виборів.

У розділі 18 розглядається проблема міждоменних запитів:

  • у [1] веб-додаток видає сторінки HTML / JavaScript;
  • у [2] браузер виконує JavaScript, вбудований у сторінки HTML, щоб звернутися до захищеного веб-сервісу [3-4];

Припустимо, що D1=http://machine1:port1 — домен сервера [1], а D4=http://machine4:port4 — домен сервера [4]. Якщо сервери [1] та [4] не знаходяться в одному домені [D1!=D4], то запити від [3] до [4] називаються міждоменними запитами. Через обмеження безпеки, впроваджені браузерами, їх реалізація може бути проблематичною. Ми розглянемо одне з рішень.

У розділі 19 міждоменні запити реалізовано на прикладі програми для проведення виборів.

1.3. Використані інструменти

Наведені нижче приклади було протестовано в такому середовищі:

  • комп’ютер із Windows 10 Pro 64-біт;
  • JDK 1.8 (параграф 22.1);
  • IDE Spring Tool Suite 3.6.3 (параграф 1);
  • NetBeans 8.1 (параграф 22.4);
  • браузер Chrome (інші браузери не використовувалися);
  • розширення для Chrome [Advanced Rest Client] (параграф 1);
  • WampServer, який запускає SGBD, MySQL та інструмент [PhpMyAdmin] для управління ним (параграф 22.7);

Важливо використовувати JDK версії 1.8. У деяких прикладах використовуються елементи цього JDK. Більшість прикладів — це проекти Maven, які можна відкривати як у IDE, так і в Eclipse [https://www.eclipse.org/], IntellijIDEA Community Edition, [https://www.jetbrains.com/idea/download/] та NetBeans [https://netbeans.org/]. Далі наведені знімки екрана з IDE Spring Tool Suite — варіанту Eclipse.

1.4. Підтримка

Проєкти Eclipse, згадані в цьому документі, доступні на сайті [https://tahe.developpez.com/tutoriels-cours/intro-java-spring/serge-tahe-introduction-au-langage-java-et-a-l-ecosysteme-spring/].

Щоб імпортувати проекти з розділу, виконайте в Eclipse дії, описані в [1-8]:

Більшість проектів — це проекти Maven. Якщо після завантаження в них виявляться помилки, виконайте [Alt-F5] і дотримуйтесь процедури, описаної в [9-10]. Вибрані проекти Maven будуть перекомпільовані.