Skip to content

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

Мета

  • Оволодіти основами мови програмування Java
  • Отримати навички розробки програм з використанням принципів ООП
  • Ознайомитись з платформою Java SE
Програмні засоби та інструменти

Вимоги

  1. Початковий код повинен відповідати Java Code Conventions.

  2. Коментарі використовувати для автоматичної генерації документації за допомогою Javadoc (вікі).

  3. Рішення всіх лабораторних робіт розміщувати у відповідних пакетах єдиного проекту (див. приклад):

    • проект повинен мати назву surname-name - прізвище та им'я розробника латинкою в нижньому регістрі;
    • пакети, що містять всі розроблені класи та підпакети для кожного рішення, повинні мати назву ua.khpi.oop.surnameXX, де XX - номер роботи.
Рекомендації

Звіт

Не потрібен за наявності javadoc-коментарів, що відповідають завданню.

Приклад документуючих коментарів
/**
 * The Foo class is a silly example to illustrate documentation comments.
 */
public class Foo {

    /**
     * An integer to keep track of for fun.
     */
    private int count;
    ...

    /**
     * Initialize a newly created object.
     */
    public Foo() {
        ...
    }

    /**
     * Increment a value by delta and return the new value.
     *
     * @param delta the amount the value should be incremented by
     * @return the post-incremented value
     */
    public int increment(int delta) {
        ...
    }
    ...
}
Структура звіту

Надається у вигляді файлів doc/surnameXX/readme.md (XX - номер роботи) в Markdown-форматі українською мовою.

Обов'язковий розділ Зауваження
Номер і тема роботи Вказується з вирівнюванням по центру рядка.
Мета: ... Відповідає темі та завданню.
1 ВИМОГИ Повне формулювання завдання.
1.1 Розробник Інформація про розробника:
- прізвище, ім'я, по батькові;
- назва академічної групи;
- номер варіанту.
1.2 Загальне завдання Вимоги, обмеження та зауваження.
1.3 Задача Прикладна задача відповідно до варіанта.
2 ОПИС ПРОГРАМИ Особливості рішення, структура програми, схеми та ілюстрації.
2.1 Засоби ООП Обґрунтування застосовуваних об'єктно-орієнтованих методів.
2.2 Ієрархія та структура класів Опис розроблених класів.
2.3 Важливі фрагменти програми Частини тексту програми, що демонструють рішення задачі.
3 ВАРІАНТИ ВИКОРИСТАННЯ Опис поведінки програми: "хто" і "що" може зробити.
Відповідає функціональним вимогам.
Ілюструється за допомогою копій екрану з описом.
ВИСНОВКИ Заключення стосовно повноти досягнення мети.

Лабораторні роботи

Спільні завдання

  1. Розробити програму для рішення індивідуального завдання.

  2. Виконати рефакторинг відповідно до загальних вимог.

  3. Виправити програму з урахуванням отриманих зауважень.

Індивідуальні завдання

  1. Структура програми мовою Java. Типи даних, літерали, операції і оператори

  2. Алгоритмічна декомпозиція. Прості алгоритми обробки даних

  3. Утилітарні класи. Обробка масивів і рядків

  4. Інтерактивні консольні програми для платформи Java SE

  5. Розробка власних контейнерів. Ітератори

  6. Серіалізація/десеріалізація об'єктів. Бібліотека класів користувача

  7. Об'єктно-орієнтована декомпозиція

  8. Основи введення/виведення Java SE

  9. Параметризація в Java

  10. Обробка параметризованих контейнерів

  11. Регулярні вирази. Перевірка даних

  12. Регулярні вирази. Обробка тексту

  13. Паралельне виконання. Multithreading

  14. Multithreading. Ефективність використання

  15. Колекції в Java

  16. Модульне тестування

Заочна форма навчання

Тема

Розробка об'єктно-орієнтованих програм мовою Java для вирішення прикладних задач.

Мета

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

Завдання

  1. Розробити програму рішення:

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

  3. Звіт повинен відповідати загальним вимогам.

Приклади

Початковий код demo-проекту.

Структура
demo
    ├── doc
    │   ├── demo01
    │   │   └── readme.md
    │   ├── demo02
    │   │   └── readme.md
    │   └── demo03
    │       └── readme.md
    └── src
        └── ua
            └── khpi
                └── oop
                    ├── demo01
                    │   ├── Main.java
                    │   └── package-info.java
                    ├── demo02
                    │   ├── Main.java
                    │   └── package-info.java
                    └── demo03
                        ├── Main.java
                        └── package-info.java
Пакети
Пакет Опис
1 ua.khpi.oop.demo01 Демонстрація структури проекту рішення завдання лабораторної роботи №1
2 ua.khpi.oop.demo02 Демонстрація структури проекту рішення завдання лабораторної роботи №2
3 ua.khpi.oop.demo03 Демонстрація визначення часу обробки даних

Презентації

Призначення Зміст
1 Лекція №1 Overview. Program Structure
2 Лекція №2 Data Types. Arrays
3 Лекція №3 Operators. Control Flow Statements
4 Лекція №4 OOP Concepts

Література

Для новачків

  1. The Java Programming Language. Ken Arnold, James Gosling, David Holmes. ISBN: 9780321349804. Класична книга, написана одним із творців Java. Чудовий старт для тих, хто тільки починає вивчати Java.

  2. Core Java, Volume I: Fundamentals. Cay Horstmann. ISBN: 9780135328378. Один із найкращих ресурсів для освоєння Java. Цей перший із двох томів пропонує детальний розгляд фундаментальних тем, включаючи ООП, рефлексію, інтерфейси, внутрішні класи, обробку винятків, дженерики, колекції, лямбда-вирази, паралелізм тощо.

  3. Head First Java: A Brain-Friendly Guide. Kathy Sierra, Bert Bates, Trisha Gee. ISBN: 9781491910771. Веселий і інтерактивний підхід до вивчення Java. Для новачків, які хочуть швидко зрозуміти основи.

  4. Java: A Beginner's Guide. Herbert Schildt, Danny Coward. ISBN: 9781265054632. Простий і зрозумілий посібник для початківців, який охоплює всі основні концепції Java, включаючи нові функції версій Java 21+.

Для досвідчених

  1. Core Java, Volume II: Advanced Features. Cay Horstmann. ISBN: 9780135371749. Поглиблений аналіз корпоративного програмування, мереж, баз даних, безпеки, локалізації та роботи з XML.

  2. Thinking in Java. Bruce Eckel. ISBN: 9780131872486. Необхідно прочитати кожному розробнику. Допомагає зрозуміти філософію Java, її архітектуру та підходи до вирішення завдань. Дуже глибока та корисна для розуміння, що таке Java.

  3. Effective Java. Joshua Bloch. ISBN: 9780134685991. Кожен розділ складається з кількох слабко пов'язаних одне з одним невеликих статей, що ілюструють тонкощі Java. Написана практиком з чималим досвідом. Абсолютно необхідна для розробників із досвідом. Містить практичні поради щодо написання ефективного і безпечного коду.

  4. Java Concurrency in Practice. Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, Doug Lea. ISBN: 9780321349606. Найкращий ресурс для вивчення багатопоточності в Java.

  5. Modern Java in Action: Lambdas, Streams, Functional and Reactive Programming. Raoul-Gabriel Urma, Mario Fusco, Alan Mycroft. ISBN: 9781617293566. Охоплює сучасні підходи до програмування в Java, такі як лямбда-вирази, потоки і реактивне програмування.

Про розробку в цілому

  1. Design Patterns: Elements of Reusable Object-Oriented Software. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. ISBN: 9780201633610, 9780201634983. Класика про шаблони проектування. Читати тільки в оригіналі! Перекладачі доклали всіх зусиль, щоб зіпсувати все до неможливості.

  2. Applied Java Patterns. Stephen Stelting, Olav Maassen. ISBN: 9780130935380. Присвячена шаблонами проектування - прийомам організації програм, які на практиці довели свою ефективність. Корисна, при проектуванні архітектури програм.

  3. Bug Patterns In Java. Eric Allen. ISBN: 9781590590614. Про те, як не треба робити. Типові помилки розробників Java. Дуже корисна для тих, хто хоче уникнути поширених проблем.

  4. Refactoring: Improving the Design of Existing Code. Martin Fowler. ISBN: 9780134757599. Вчить, як покращувати існуючий код, роблячи його більш читабельним та підтримуваним.

  5. Clean Code: A Handbook of Agile Software Craftsmanship. Robert C. Martin. ISBN: 9780132350884. Найкраща книга для розуміння принципів написання чистого і якісного коду.

Iнше

  1. GRASP, SOLID.
  2. Рефакторинг, патерни проектування, принципи SOLID.
  3. Design patterns, anti-patterns, refactoring.