README excerpt
# Pharo_FruitTreeTask
ВАРІАНТ №10
Спроектуйте класи, вказані нижче. У кожному з них визначте метод виведення в потік, методи порівняння, виконання арифметичних дій. Оголошення цих класів розташуйте у окремому пакеті. Інформацію про екземпляри класів задайте в Playground, прочитайте з клавіатури або з файлу. Функціонал класів перевірте за допомогою модульних тестів.
1. Оголосіть клас «Фруктове дерево». Об’єкт класу містить назву виду дерева, вік, висоту, урожайність. Дерево починає плодоносити після досягнення певного віку (наприклад, 3-4 роки). Кожен рік, що минув, збільшує вік, висоту, урожайність. Визначте для об’єктів класу оператори введення-виведення та порівняння, метод, що повідомляє урожайність. Оголосіть класи «Яблуня» і «Абрикос». Яблуня –це фруктове дерево, що плодоносить один раз на два роки, і «пам’ятає» колір своїх плодів. Абрикос –це фруктове дерево, що пам’ятає, чи були заморозки під час цвітіння: якщо так, то урожайність зменшується на 80%.
2. Створіть контейнер з декількома яблунями й абрикосами,надрукуйте його. Забезпечте можливість вводити в режимі діалогу інформацію про одне нове фруктове дерево і долучати його до колекції інших.Знайдіть найвище дерево, знайдіть найурожайніше дерево, перевірте, чи всі дерева досягли плодоносного віку.Повідомте кожному дереву, що пройшов рік, пройшло два роки, збережіть колекцію об’єктів до файла, знайдіть три найпродуктивніші дерева, створіть нову колекцію, що містить дерева, які не перевищують заданої висоти.
3. Продемонструйте зберігання створених об’єктів до файлу (до різних файлів у різних форматах), до бази даних (наявність бази можна імітувати в пам’яті) та завантаження їх з файлу, з бази. Робота з БД -завдання на майбутнє.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
Короткий опис проекту
Цей проект репрезентує імітацію фруктових дерев (FruitTree), таких як яблуня (AppleTree) та абрикоса (ApricotTree).
Клас FruitTree є базовим від якого уже наслідуються клас яблуня та клас абрикоса. У батьківському класі визначено такі оператори, як введення-виведення та порівняння(>, <, =, <=, >=), метод, що повідомляє урожайність, метод, що імітує проходження року життя дерева(inAYear). У похідних класах перевизначено деякі із цих методів, як наприклад inAYear, оператори < та =, введення-виведення.
У класі AppleTree було додано два додаткових поля класу «cropColor», що відповідає за колір плодів та «isCropThisYear», що вказує чи є цього року врожай чи ні. При перевизначення методу, що імітує ріст дерева на один рік(inAYear) було враховано особливість яблуні, що вона дає плоди один раз на два роки.
У класі ApricotTree було додано додаткове поле «isCold», що вказує чи були цього року заморозки чи ні. При перевизначення методу, що імітує ріст дерева на один рік(inAYear) було враховано особливість абрикоси, що вона дає на 80% плодів менше, якщо цього року були заморозки.
Клас FruitContainer створений для зберігання об'єктів класу FruitTree. У ньому визначено такі методи для знаходження найвищого дерева, трьох дерев з максимальною врожайністю, одного дерева з найбільшою врожайністю та метод для перевірки, чи усі дерева здатні плодити.
Кожен метод кожного із класів містить короткий коментар про те, яку функцію він виконує та крім цього кожен покритий тестами.
Для кожного класу додані методи для запису у файл (STON), та зчитування об'єкту з файлу.
Для зручності, за допомогою UIManager, було створено вікно для додавання нових об'єктів в контейнер.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
Розподіл обов’язків
У першу чергу варто зазначити, що реалізація кожного класу чи методу було спільно обговорено та затверджено. Тому інтелектуальна робота із визначення, як саме буде реалізовано той чи інший метод, була цілком і повністю розділена між кожним із трьох членів команди порівну.
Щодо фактичного написання коду, то обов’язки поділилися таким чином:
Кузьмич Андрій: відповідальний за створення та ініціалізацію початкового проекту на GitHub і за створення та реалізацію класу FruitContainer і всього його вмісту.
Снігур Ігор: відповідальний за налагодження зв’язку інших членів команди із віддаленим репозиторієм на GitHub, а також за створення та реалізацію класу AppleTree і всього його вмісту.
Цибулька Назар: відповідальний за створення та наповнення README файлу, а також за створення та реалізацію класів FruitTree та ApricotTree і всього їх вмісту.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
# Pharo_GardenTask
ВАРІАНТ №10
У попередньому завданні ви створили пакет з ієрархією класів Дерево, Яблуня, Абрикос. Доповніть пакет оголошенням класу Сад, який має власника, зберігає колекцію дерев, висаджуєнові та викорчовує старі; вміє виводити на друк інформацію про себе і свої дерева(разом про всіх або про окрему категорію); вміє обчислювати сукупнийурожай; знаходити дерева певного виду (наприклад, яблуні з червоними яблуками);перевіряти, чи не постраждали дерева від заморозків,повідомляти їм, що минув рік.Іноді садзапитує у власника, чи не потрібно вилучити/замінити старі дерева.Ви можете доповнити функціонал садуна власний розсуд. Правильність роботи методів класу перевірте за допомогою модульних тестів.Побудуйте віконний інтерфейс для взаємодії з садомі деревами. Головне вікно мало б відображати інформацію про садінаявні дерева, надавати доступ через візуальні засоби (меню, кнопки тощо) до функціоналу саду. Для отримання від користувача інформації про новедеревостворіть власне вікно діалогу. Його вміст мав би залежати від типу дерева. Забезпечте можливість зберігати саддо файлу та завантажувати йогоз файлу. Щоб обрати ім’я файлу, використайте стандартний діалог.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
Короткий опис другої частини проекту
У цій частині проекту було створено клас Garden що імітує сад дерев(абрикос і яблунь) та новий пакет Fruit Trees Presenters для створення користувацького інтерфейсу.
Клас Garden містить такі поля: owner – власник саду та treeCollection (екземпляр класу FruitContainer) – колекція, що містить у собі яблуні та абрикоси. Тут визначено такі методи та оператори, як: введення-виведення, виведення лише певного виду дерев, методи, що імітують висаджування нових та викорчовування старих дерев, addTree та removeTree відповідно, обчислення сукупного урожаю totalCropCapacity, знаходження дерева первного виду treesOfType, метод, що перевіряє чи не постраждали дерева від заморозків frozenTrees та метод, що імітує проходження року життя дерева inAYear.
Пакет Fruit Trees Presenters…
Кожен метод кожного із класів містить короткий коментар про те, яку функцію він виконує та крім цього кожен покритий тестами.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
Розподіл обов’язків
Як і при виконанні попередньої роботи ми спільно обговорювали та затверджували будь-які деталі реалізації того чи іншого методу чи класу. Тому інтелектуальна робота, знову, була розділена порівну між кожним із трьох членів команди.
Щодо фактичного написання коду, то обов’язки поділилися таким чином:
Кузьмич Андрій: відповідальний за створення UI частини та налаштування пакету Fruit Trees Presenters.
Реалізував:
1) GardenPresenter (головне вікно, що містить таблицю (сад) та кнопки для взаємодії з садом)
2) GardenActionBarPresenter (Action Bar, що містить кнопки для взаємодіє з таблицею)
3) AddTreeFormPresenter (форма для додавання дерева певного типу, містить декілька загальних полів вводу та Radio Buttons для зміни типу дерева)
4) AppleTreeFormPresenter (форма, що має унікальні поля вводу для дерева типу AppleTree)
5) InformationPresenter (форма, що викликається для інформування користувача про певну подію)
6) RemoveTreePresenter (форма, що запитує користувача про видалення дерев з таблиці)
7) TreesReportPresenter (форма, що містить поле для вводу року дерева, для виведення усіх інших дерев, що старші за даний вік)
8) У класі Garden на стороні класу, було створено поле fruitTrees, що імітує базу даних, яка зберігається в існуючому образі системи, а також похідні методи addTree, removeTree.
Снігур Ігор: відповідальний за часткове наповнення класу Garden. Реалізував такі методи, як: frozenTrees, hasFrozenTrees, inAYear, oldTreesReport, removeTreesOlderThan, totalCropCapacity, treesOfType, treesOfType: color:.
Цибулька Назар: відповідальний за наповнення README файлу, а також за створення та часткове наповнення класу Garden. Реалізував такі методи, як: addTree, removeTree, initialize, initializeWithParameters, printOn, printOnAppleTrees, printOnApricotTrees та методи доступу до полів. Крім цього, створив та налаштував такі кнопки на користувацькому інтерфейсі: Year ago(імітує проходження року у всіх деревах), Crop(виводить загальну урожайність усіх дерев у саду), Old trees(виводить усі дерева старші за певний рік).
------------------------------------------------------------------------------------------------------------------------------------------------------------------
## UI Частина проекту

:--:
*Головне вікно для демонстрації саду та взаємодії з ним*

:--:
*Вікно додавання дерева певного типу*
!