├── .gitignore ├── .idea ├── .gitignore ├── description.html ├── encodings.xml ├── misc.xml ├── modules.xml ├── project-template.xml └── vcs.xml ├── JavaAllExercices.iml ├── README.md └── src └── ru └── mirea ├── Main.java ├── excercise6 └── README.md ├── exercies11and12 └── README.md ├── exercies13and14 └── README.md ├── exercies15and16 ├── README.md └── Z5vBv.png ├── exercies17and18 └── README.md ├── exercies19and20 └── README.md ├── exercies21and22 └── README.md ├── exercies23and24 ├── README.md └── movementList.csv ├── exercies25and26 ├── 1.png └── README.md ├── exercies27and28 ├── Main.java ├── README.md └── images │ ├── 100325-yana.jpg │ ├── 1446210278_funny-shake-cats-in-slow-motion-7.jpg │ ├── 1531993063_7-26-1024x640.jpg │ ├── 17478da42271207e1d86.jpg │ ├── 2625053524.jpg │ ├── 94201-nos-usy-koshki_malogo_i_srednego_razmera-privlekatelnost-glaz-1920x12001-1.jpg │ ├── Cats_Paws_Glance_449274_3840x2400.jpg │ ├── Duy0GsWW4AEmd56.jpg │ ├── aHR0cDovL3d3dy5saXZlc2N.jpg │ ├── b2de4b4ac0fd8ae8ec21d480bf1c1ab1.jpg │ ├── bk_info_145375_orig_1550825069.jpg │ ├── cat_su10.jpg │ ├── fda1f0c1584fb2d.jpg │ ├── ff175d9fb6df1cb7b241.jpg │ ├── fullsize.jpg │ ├── glaza-morda-trava-priroda-kot-koska-vzglad-seryj.jpg │ ├── i.jpg │ ├── kotiki-v-korzinke.jpg │ ├── malenki-polosatyy-kotenok-7acd3be.jpg │ ├── nastol.com.ua-128024.jpg │ ├── nastol.com.ua-96028.jpg │ ├── ulitsa-koshka-zabor-lezhit-kotik.jpg │ ├── wpapers_ru_Два-очаровательных-котенка.jpg │ └── Одомашнивание-кошек-1.jpg ├── exercies29and30 └── README.md ├── exercies31and32 └── README.md ├── exercies8 ├── Diagram.jpg └── README.md ├── exercies9and10 └── README.md ├── exercise5 ├── Circle.java ├── Main.java ├── Movable.java ├── Point.java ├── PointMovable.java └── README.md └── exercise7 ├── Dish.java ├── Main.java ├── Pan.java ├── Plate.java └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Project exclude paths 2 | /out/ -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/description.html: -------------------------------------------------------------------------------- 1 | Simple Java application that includes a class with main() method -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/project-template.xml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /JavaAllExercices.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Общие принципы использование репозитория 2 | 3 | Добрый день дорогие студнеты и начинающие Java девелоперы. У нас с вами пройдет по плану 32 практические работы по Java. 4 | Основные правила использования курса следующие: 5 | - Fork привествуется; 6 | - общаться по заданиям между собой и обсуждать приветствуется; 7 | - Отправка заданий производится либо на почту artemmakarevich1997@gmail.com или при помощи pull request в мой репозиторий(аккаунт artemmad). 8 | 9 | # Структура проекта 10 | 11 | Предлагаю вам разбивать один репозиторий внутри на пакеты. По итогу у вас каждая практическая работа будет представлена пакетом внутрив вашего решения в Intelij Idea. Внутри каждого пакеты вы должны создать свой исполняемый класс Main.java по стандарту чтобы можно было организовать точку входа в программую 12 | 13 | ```java 14 | package ru.mirea; 15 | 16 | public class Main { 17 | 18 | public static void main(String[] args) { 19 | // write your code here 20 | } 21 | } 22 | ``` 23 | 24 | Так вы сможете разделить кажду вашу работу внутри решения и подтягивать классы созданные в предыдущих работах из других пакетов. 25 | 26 | # Доставка решения и его верефикация 27 | 28 | Для отправки решения преподавателю предлагаются : 29 | - почта куда вы можете отправлять решения в формате: тема письма "Практическая работа №1 Фамилия И.О. Группа", в теле письма ссылка на git репозиторий. Отвечать на выполненную работу буду через почту ; 30 | - pull request через github. Отвечать зачтена работа или нет я буду в комментариях к Pull Request. 31 | 32 | # Выкачивание к себе изменений 33 | 34 | Выкачивание из данного репозитория изменений предусмотре добавлением данного репозитория к вам в remote и получение изменений с него через fetch. По факту для получения изменений вам небходимо воспользлваться опцией pull и вытянуть изменения с текущего репозитория. Обращаю внимание что могут возникать конфликты. Если они у вас возникают и вы не знаете что делать, напишите мне в вк или еще куда угодно где я доступен с запросом о помощи в получении изенений отсюда. 35 | 36 | # Расположение заданий 37 | 38 | В каждом пакете в папке Src размещен Readme файл, в котором будет описана текущая работа, задане на выполнение практической и возможно полезные ресурсы которым можно было бы воспользоваться в теме данного задания. 39 | 40 | # Задание на автомат по практическим 41 | В случае выполнения данного задания все практические проставляются автоматом. Это не означает получения автомата по всему предмету, но вы получаете допуск к экзамену без сдачи всех **32 лабораторных** работ. 42 | 43 | **Необходимо предложить тему преподавателю** 44 | 45 | Задание можно выполнять командой не более 3-х человек. Если решение показывает команда, будут заданы вопросы о том кто какую часть работы выполнил, и дана задача защитить свою часть преподавателю. В случае успешной защиты команда получает зачет по всем 32 практикам. 46 | -------------------------------------------------------------------------------- /src/ru/mirea/Main.java: -------------------------------------------------------------------------------- 1 | package ru.mirea; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | // write your code here 7 | 8 | 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/ru/mirea/excercise6/README.md: -------------------------------------------------------------------------------- 1 | # Задание к Практической №6 2 | 3 | 1. Добавьте в проект ранее разработанный класс прямоугольник (Rectangle). Если его нет, то создайте его. На основе него напишите новый класс 4 | MovableRectangle (движущийся прямоугольник). Ваш класс должен реализовывать интерфейс Movable 5 | 2. Прямоугольник можно также представить как две движущиеся точки MovablePoints (представляющих верхняя левая и нижняя 6 | правая точки) и реализующие интерфейс Movable. 7 | 3. Убедитесь, что две точки имеет одну и ту же скорость (нужно добавить метод, который проверяет двигатются ли точки с одной и той же скорость ). -------------------------------------------------------------------------------- /src/ru/mirea/exercies11and12/README.md: -------------------------------------------------------------------------------- 1 | # Задание к Практической №11 и №12 2 | 3 | 1. Создайте простой экран на JavaFX с выводом на экран текса "Hello World" 4 | 2. Создайте калькулятор с визуальным интерфейсом состоящий из 2-х полей (ввод и вывод) и 4-х кнопок (+, -, *, /, =). 5 | 6 | Логика работы программы и интерфейса следующая: 7 | - пользователь вводит число; 8 | - пользователь нажимает на одну из кнопок описывающих операцию и поле ввода очищается предоставляя возможность ввести второй аргумент для выполнения операции; 9 | - пользователь вводит второй аргумент; 10 | - пользователь нажимает на кнопку равно и получает результат операции в поле для вывода. 11 | 12 | Опционально вы можете сократить количество полей до одного в которое будет происходить и ввод значений и вывод результата, по логике стандартных калькуляторов на мобильных приложениях. 13 | 14 | ## Рекомендации: 15 | - использовать можно как Swing так и JavaFX. Отличие в том что JavaFX новее и имеет возможность использовать CSS. Познакомиться с JavaFX можно [тут](https://metanit.com/java/javafx/1.1.php); 16 | - для быстрого старта JavaFX можно воспользоваться [следующим гайдом](https://metanit.com/java/javafx/1.2.php); 17 | - для построения проекта и вытягивания библиотек рекомендуется использовать [gradle](https://ru.wikipedia.org/wiki/Gradle) и ознакомиться [как использовать gradle на примере JavaFX](https://habr.com/ru/post/474292/) и тут вы как раз найдете [Hello World на JavaFX с использованием gradle](https://github.com/openjfx/samples/tree/master/HelloFX/Gradle); 18 | - Так же стоит воспользоваться [инструкций по работе с JavaFX на базе IntelliJ IDEA](https://openjfx.io/openjfx-docs/#IDE-Intellij); 19 | - На всякий случай [видео по старту в JavaFX в IntelliJ IDEA](https://www.youtube.com/watch?v=nKIMGH0l3Wo&ab_channel=PaulGestwicki); 20 | - Как вариант можно воспользоваться [данным гайдом](https://www.youtube.com/watch?v=p5ifU9kkp6g&ab_channel=KodySimpson) по построению калькулятора. 21 | 22 | Вместо создания javaFx приложения можно создать RestAPI на Spring Boot котрое реализует все те же операции. Это касается так же и всех остальных задач которые требуют и не требуют интерфейса. За 1 задачу на spring boot в зависимости от степени сложности может быть зачтена одна и более практика. 23 | -------------------------------------------------------------------------------- /src/ru/mirea/exercies13and14/README.md: -------------------------------------------------------------------------------- 1 | # Задание к Практической №13 и №14 2 | 3 | Создайте игру крестики-нолики на JavaFX или Swing. 4 | 5 | Логика работы программы и интерфейса следующая: 6 | - пользователь нажимает в любой квадрат на экране в поле 4х4 и в этом поле выставляется крестик; 7 | - пользователь нажимает на любой другой квадрат сетки и в нем выставляется нолик; 8 | - первые два действия повторяются до тех пор, пока все клетки не будут заполнены или не будет очевиден победитель; 9 | - на экран выводится кто выиграл крестики или нолики. 10 | 11 | Опционально вы можете сократить количество действий в интерфейсе. 12 | 13 | ## Рекомендации: 14 | - использовать можно как Swing так и JavaFX. Отличие в том что JavaFX новее и имеет возможность использовать CSS. Познакомиться с JavaFX можно [тут](https://metanit.com/java/javafx/1.1.php); 15 | - для быстрого старта JavaFX можно воспользоваться [следующим гайдом](https://metanit.com/java/javafx/1.2.php); 16 | - для построения проекта и вытягивания библиотек рекомендуется использовать [gradle](https://ru.wikipedia.org/wiki/Gradle) и ознакомиться [как использовать gradle на примере JavaFX](https://habr.com/ru/post/474292/) и тут вы как раз найдете [Hello World на JavaFX с использованием gradle](https://github.com/openjfx/samples/tree/master/HelloFX/Gradle); 17 | - Так же стоит воспользоваться [инструкций по работе с JavaFX на базе IntelliJ IDEA](https://openjfx.io/openjfx-docs/#IDE-Intellij); 18 | - На всякий случай [видео по старту в JavaFX в IntelliJ IDEA](https://www.youtube.com/watch?v=nKIMGH0l3Wo&ab_channel=PaulGestwicki); 19 | - Как вариант можно воспользоваться [данным гайдом](https://www.youtube.com/watch?v=p5ifU9kkp6g&ab_channel=KodySimpson) по построению калькулятора. 20 | 21 | -------------------------------------------------------------------------------- /src/ru/mirea/exercies15and16/README.md: -------------------------------------------------------------------------------- 1 | # Задание к Практической №15 и №16 2 | 3 | 1. Необходимо написать класс робота который умеет ходить. За движение каждой его ноги отвечает отдельный поток. Шаг выражается в выводе в консоль LEFT или RIGHT. 4 | 5 | 2. Создать систему менеджмента банковского аккаунта. Множество терминалов обращаются с различной временной задержкой с рандомными операциями увеличения или уменьшения счета. Каждый ATM является отдельным потоком. 6 | 7 | ![](https://github.com/artemmad/JavaAllExercices/blob/master/src/ru/mirea/exercies15and16/Z5vBv.png?raw=true) 8 | 9 | Класс Person к которому привязан аккаунт будет выглядеть следующим образом: 10 | ```java 11 | public class Person { 12 | private String name; 13 | 14 | public Person(String name) { 15 | this.name = name; 16 | } 17 | 18 | public String getName() { 19 | return name; 20 | } 21 | 22 | public void setName(String name) { 23 | this.name = name; 24 | } 25 | 26 | @Override 27 | public String toString() { 28 | return name; 29 | }} 30 | ``` 31 | 32 | У аккаунта для снятия денег есть должен существовать баланс и с этого баланса и списываются или начисляются деньги через каждый отдельный ATM. Важно понимать, что вполне возможна ситуация одновременного начисления и снятия денег со счета, что необходимо проверить. Задача сделать так, чтобы при снятии денег со счета двумя ATM не происходил выход в отрицательный баланс. Логика ATM обязана исполняться в отдельном потоке (реализация интерфейса Runnable, наследование от Thread или AsynkTask). Если логика ATM исполняется в основном потоке - задача решена неправильно. 33 | 34 | Для проверки работоспособности необходимом создать класс Tester который попробует одновременно запустить несколько ATM кладущих и снимающих деньги на счет. Задачу необходимо реализовать через синхронизацию потоков. 35 | В консоли должен оказаться полный лог действий ATM и состояний аккаунта если кто-то его изменял. 36 | 37 | ## Рекомендации: 38 | - Для знакомства с похожими задачами и лучшим пониманием специфики [можно почтиать тут](https://habr.com/ru/post/352374/) 39 | - так же рекомендую ознакомиться со следующим [материалом по многопоточности Java на Metanit](https://metanit.com/java/tutorial/8.1.php) 40 | - в обоих заданиях используется синхронизация потоков и делать это следует через ключевое слово [syncronize](https://metanit.com/java/tutorial/8.3.php) -------------------------------------------------------------------------------- /src/ru/mirea/exercies15and16/Z5vBv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies15and16/Z5vBv.png -------------------------------------------------------------------------------- /src/ru/mirea/exercies17and18/README.md: -------------------------------------------------------------------------------- 1 | # Задание к Практической №17 и №18 2 | 3 | 1. Написать регулярное выражение, определяющее является ли данная строка строкой "abcdefghijklmnopqrstuv18340" или нет. 4 | 5 | – пример правильных выражений: abcdefghijklmnopqrstuv18340. 6 | 7 | – пример неправильных выражений: abcdefghijklmnoasdfasdpqrstuv18340. 8 | 9 | 2. Написать регулярное выражение, определяющее является ли заданная строка правильным MAC-адресом. 10 | 11 | – пример правильных выражений: aE:dC:cA:56:76:54. 12 | 13 | – пример неправильных выражений: 01:23:45:67:89:Az. 14 | 15 | 3. Есть текст со списками цен. Извлечь из него цены в USD, RUR, EU. 16 | 17 | – пример правильных выражений: 23.78 USD. 18 | 19 | – пример неправильных выражений: 22 UDD, 0.002 USD. 20 | 21 | ## Рекомендации: 22 | - c Pattern и Matcher [можно почтиать тут](http://www.4stud.info/java-programming/strings-and-regexp.html) 23 | - так же рекомендую ознакомиться со следующим [материалом по regex в Java на Metanit](https://metanit.com/java/tutorial/7.4.php) 24 | - рекомендую ознакомиться в целом [как работать со строками в Java](https://metanit.com/java/tutorial/7.2.php) -------------------------------------------------------------------------------- /src/ru/mirea/exercies19and20/README.md: -------------------------------------------------------------------------------- 1 | # Задание к Практической №19 и №20 2 | 1. Напишите генератор «красивых» автомобильных номеров. Используйте правила генерации номеров для получения более 2 млн номеров: 3 | - X, Y, Z — различные буквы автомобильного номера ("А", "В", "Е", "К", "М", "Н", "О", "Р", "С", "Т", "У", "Х"), N — цифры, R — регион (от 01 до 199); 4 | - XNNNYZR — пример, A111BC197, Y777HC66 5 | 6 | 2. Используя генератор «красивых» номеров сгенерируйте N-номеров и проведите поиск номера, введенного из консоли, с помощью методов: 7 | - прямым перебором по ArrayList, (array.contains()) 8 | - бинарным поиском по сортированному ArrayList, (Collections.binarySearch()) 9 | - поиском в HashSet, (setHash.contains()) 10 | - поиском в TreeSet. (setTree.contains()) 11 | 12 | 3. Измерьте и сравните длительность каждого метода поиска. 13 | Формат вывода результатов поиска: 14 | - Поиск перебором: номер <найден/не найден>, поиск занял 34нс 15 | - Бинарный поиск: номер <найден/не найден>, поиск занял 34нс 16 | - Поиск в HashSet: номер <найден/не найден>, поиск занял 34нс 17 | - Поиск в TreeSet: номер <найден/не найден>, поиск занял 34нс 18 | 19 | Для этого воспольхуйтесь следующей встроенной утилитой выводящей систeмное время в милисекундах: 20 | 21 | 22 | ``` java 23 | long m = System.currentTimeMillis(); 24 | // Код 25 | System.out.println((double) (System.currentTimeMillis() - m)); 26 | ``` 27 | 28 | Рекомендации 29 | 30 | - Сортировка не входит в учёт времени для бинарного поиска. 31 | - Для детального сравнения методов поиска используйте время в наносекундах: System.nanoTime() 32 | - Перед использованием Collections.binarySearch() не забудьте использовать Collections.sort() для сортировки основного ArrayList 33 | -------------------------------------------------------------------------------- /src/ru/mirea/exercies21and22/README.md: -------------------------------------------------------------------------------- 1 | # Задание к Практической №21 и №22 2 | ## 1) Реализовать класс Абстрактная фабрика для комплексных чисел 3 | ## 2) Реализовать класс Абстрактная фабрика для различных типов стульев: 4 | Виды стульев: 5 | - Викторианский стул; 6 | - Многофункциональный стул; 7 | - Магический стул; 8 | - интерфейс Стул, от которого наследуются все классы стульев, и класс Клиент, который использует интерфейс стул в своем методе Sit (Chair chair). 9 | ## 3) Компании нужно написать редактор текста, редактор изображений и редактор музыки. 10 | В трёх приложениях будет очень много общего. 11 | 12 | Главное окно, панель инструментов, команды меню будут весьма схожими. Чтобы не писать повторяющуюся основу трижды, вам 13 | поручили разработать основу (каркас) приложения, которую можно использовать во всех трёх редакторах. На совещании в 14 | компании была принята следующая архитектура: 15 | 16 | Есть некий базовый интерфейс IDocument, представляющий документ неопределённого рода. 17 | От него впоследствии будут унаследованы конкретные документы: TextDocument, ImageDocument, MusicDocument и т.п. 18 | Интерфейс 19 | IDocument перечисляет общие свойства и операции для всех документов. 20 | • При нажатии пунктов меню File -> New и File -> Open требуется создать новый экземпляр документа (конкретного подкласса). 21 | Однако каркас не должен быть привязан ни к какому конкретному виду документов. 22 | • Нужно создать фабричный интерфейс ICreateDocument. Этот интерфейс содержит два абстрактных фабричных метода: CreateNew 23 | и CreateOpen, оба возвращают экземпляр IDocument 24 | • Каркас оперирует одним экземпляром IDocument и одним экземпляром ICreateDocument. Какие конкретные классы будут 25 | подставлены сюда, определяется во время запуска приложения. 26 | Требуется: 27 | 1. Создать перечисленные классы. Создать каркас приложения — окно редактора с меню File. В меню File реализовать пункты New,Open, Save, Exit. 28 | 2. Продемонстрировать работу каркаса на примере текстового редактора. Потребуется создать конкретный унаследованный класс 29 | TextDocument и фабрику для него — CreateTextDocument. В данной практической работе рекомендуется использовать следующие 30 | паттерны: Абстрактная фабрика и фабричный метод. 31 | 32 | ##Рекомендации 33 | 34 | Создавать интерфейс в 3 задаче нет необходимости, но это и не запрещается. 35 | -------------------------------------------------------------------------------- /src/ru/mirea/exercies23and24/README.md: -------------------------------------------------------------------------------- 1 | # Задание к Практической №23 и №24 2 | ## 1) Парс CSV файлов 3 | Создать новый проект, который будет читать файл csv банковской выписки movementsList.csv и парсить полученные строки. Путь к файлу выписки храните в константе. 4 | Код должен выводить сводную информацию по этой выписке: общий приход, общий расход и разбивку расходов. 5 | 6 | Для выполнения работы предлагаю пользоваться библиотекой OpenCSV. Ссылка в рекомендациях. 7 | 8 | Примеры работы программы: 9 | 10 | Сумма расходов: 398 563.39 руб. 11 | Сумма доходов: 289 890.06 руб. 12 | 13 | Суммы расходов по организациям: 14 | RUSMOSKVA56 SHLOVE REPUBLIC 1 081.53 руб. 15 | RUSMOSCOW42 SHCL ETOILE 126.34 руб. 16 | RUSPUSHKINO105ZOOMAGAZIN 4 217.65 руб. 17 | 18 | # 2) Парс HTML кода страницы 19 | Напишите программу, которая: 20 | - получает с помощью библиотеки jsoup HTML-код страницы https://www.mirea.ru; 21 | - находит в HTML-коде теги img и получает абсолютные ссылки на изображения из атрибута src; 22 | - скачивает изображения в папку images проекта, при этом сохраняя оригинальные названия файлов; 23 | - выводит в консоль список c названиями скачанных файлов. 24 | 25 | ## Рекомендации 26 | 27 | - Ссылка на библиотеку для парса CSV файлов [OpenCSV](https://www.codeflow.site/ru/article/opencsv) 28 | - Мой личный [пример использования OpenCSV](https://github.com/RealityFamily/Junction2020Connected/tree/main/CSVParser) и [файлик транзакций который я парсил из этого примера](https://1drv.ms/u/s!Ah-XvuubJyisgYpYv8S4U6BHRcjoMA?e=uHJ5U7) 29 | - cсылка на библиотеку jsoup: https://jsoup.org/ 30 | - варианты подключения библиотеки jsoup в проект на [странице скачивания библиотеки](https://jsoup.org/download) 31 | - Для получения ссылок воспользуйтесь префиксом abs при получении атрибута src у тега img. [Пример из официальной документации.](https://jsoup.org/cookbook/extracting-data/working-with-urls) 32 | -------------------------------------------------------------------------------- /src/ru/mirea/exercies23and24/movementList.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies23and24/movementList.csv -------------------------------------------------------------------------------- /src/ru/mirea/exercies25and26/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies25and26/1.png -------------------------------------------------------------------------------- /src/ru/mirea/exercies25and26/README.md: -------------------------------------------------------------------------------- 1 | # Задание к Практической №25 и №26 2 | 3 | # 1) Получение данных из HTML-страницы, создания и чтения JSON-файлы. 4 | Получает HTML-код страницы «Список станций Московского метрополитена» https://www.moscowmap.ru/metro.html#lines с помощью библиотеки jsoup. 5 | 6 | Парсит полученную страницу и получает из неё: 7 | - Линии московского метро (получаете имя линии, номер линии). 8 | - Станции московского метро (получаете имя станции, номер линии). 9 | 10 | Создаёт и записывает на диск JSON-файл со списком станций по линиям и списком линий по формату: 11 | ![](https://github.com/artemmad/JavaAllExercices/blob/master/src/ru/mirea/exercies25and26/1.png?raw=true) 12 | Читает файл и выводит в консоль количество станций на каждой линии. 13 | 14 | ## Рекомендации 15 | 16 | - По умолчанию Jsoup читает 2 Мб данных с запрашиваемой страницы. Чтобы снять это ограничение, необходимо добавить вызов метода maxBodySize(0), устанавливающий максимальное значение получаемых данных: Document doc = Jsoup.connect(URL).maxBodySize(0).get(); значение 0 означает, что нет ограничений на принимаемый объём данных. 17 | - При изучении кода страницы удобно использовать консоль разработчика в браузере. Для этого нажмите F12, перейдите во вкладку Elements и найдите тег
. В нём содержатся таблицы с линиями, станциями и пересадками. Обращайте внимание на классы, напишите селекторы на основе найденных классов. Посмотрите, как получать элементы по селекторам в [документации JSoup](https://jsoup.org/cookbook/extracting-data/selector-syntax). 18 | - Для более быстрого поиска нужных селекторов используйте онлайн-сервис jsoup https://try.jsoup.org/ 19 | - Ссылка на библиотеку Gson для работы с Json форматом: https://github.com/google/gson#download 20 | -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/Main.java: -------------------------------------------------------------------------------- 1 | package ru.mirea.exercies27and28; 2 | 3 | import javax.imageio.ImageIO; 4 | import java.awt.image.BufferedImage; 5 | import java.io.File; 6 | import java.nio.file.Files; 7 | import java.nio.file.Paths; 8 | 9 | public class Main 10 | { 11 | public static void main(String[] args) 12 | { 13 | String srcFolder = "images"; 14 | String dstFolder = "dst"; 15 | 16 | File srcDir = new File(srcFolder); 17 | 18 | long start = System.currentTimeMillis(); 19 | 20 | File[] files = srcDir.listFiles(); 21 | 22 | try 23 | { 24 | if (!Files.exists(Paths.get(dstFolder))) 25 | { 26 | Files.createDirectories(Paths.get(dstFolder)); 27 | } 28 | 29 | for(File file : files) 30 | { 31 | BufferedImage image = ImageIO.read(file); 32 | if(image == null) { 33 | continue; 34 | } 35 | 36 | int newWidth = image.getWidth() / 2; 37 | int newHeight = (int) Math.round( 38 | image.getHeight() / (image.getWidth() / (double) newWidth) 39 | ); 40 | BufferedImage newImage = new BufferedImage( 41 | newWidth, newHeight, BufferedImage.TYPE_INT_RGB 42 | ); 43 | 44 | int widthStep = image.getWidth() / newWidth; 45 | int heightStep = image.getHeight() / newHeight; 46 | 47 | for (int x = 0; x < newWidth; x++) 48 | { 49 | for (int y = 0; y < newHeight; y++) { 50 | int rgb = image.getRGB(x * widthStep, y * heightStep); 51 | newImage.setRGB(x, y, rgb); 52 | } 53 | } 54 | 55 | File newFile = new File(dstFolder + "/" + file.getName()); 56 | ImageIO.write(newImage, "jpg", newFile); 57 | } 58 | } 59 | catch (Exception ex) { 60 | ex.printStackTrace(); 61 | } 62 | 63 | System.out.println("Duration: " + (System.currentTimeMillis() - start)); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/README.md: -------------------------------------------------------------------------------- 1 | # Задание к Практической №27 и №28 2 | 3 | # 1) Уменьшаем изображения. 4 | 5 | Напишите программу, которая уменьшает изображения на основе кода который приведен в данном пакете задания. 6 | Она должна запускать число потоков, равное количеству ядер процессора вашего компьютера. 7 | 8 | [Исходный код проекта](./Main.java) 9 | 10 | Обязательно запустите исходный код проекта и осознайте что однопоточна обработка изображений медленная. Ваша основная задача сделать обработку большого колличества изображений быстрее за счет многопоточности, но без вылета ошибок невозможности создать поток и не перегружая слишком сильно систему юзера. 11 | 12 | ## Рекомендации 13 | 14 | - Для получения количества ядер используйте метод Runtime.getRunner().availableProcessors(); 15 | - Вместе с данным проектом воспользуйтесь набором приложенных [тестовых картинок](./images) *(или возьмите любые свои)* 16 | -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/100325-yana.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/100325-yana.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/1446210278_funny-shake-cats-in-slow-motion-7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/1446210278_funny-shake-cats-in-slow-motion-7.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/1531993063_7-26-1024x640.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/1531993063_7-26-1024x640.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/17478da42271207e1d86.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/17478da42271207e1d86.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/2625053524.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/2625053524.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/94201-nos-usy-koshki_malogo_i_srednego_razmera-privlekatelnost-glaz-1920x12001-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/94201-nos-usy-koshki_malogo_i_srednego_razmera-privlekatelnost-glaz-1920x12001-1.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/Cats_Paws_Glance_449274_3840x2400.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/Cats_Paws_Glance_449274_3840x2400.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/Duy0GsWW4AEmd56.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/Duy0GsWW4AEmd56.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/aHR0cDovL3d3dy5saXZlc2N.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/aHR0cDovL3d3dy5saXZlc2N.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/b2de4b4ac0fd8ae8ec21d480bf1c1ab1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/b2de4b4ac0fd8ae8ec21d480bf1c1ab1.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/bk_info_145375_orig_1550825069.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/bk_info_145375_orig_1550825069.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/cat_su10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/cat_su10.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/fda1f0c1584fb2d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/fda1f0c1584fb2d.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/ff175d9fb6df1cb7b241.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/ff175d9fb6df1cb7b241.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/fullsize.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/fullsize.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/glaza-morda-trava-priroda-kot-koska-vzglad-seryj.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/glaza-morda-trava-priroda-kot-koska-vzglad-seryj.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/i.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/i.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/kotiki-v-korzinke.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/kotiki-v-korzinke.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/malenki-polosatyy-kotenok-7acd3be.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/malenki-polosatyy-kotenok-7acd3be.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/nastol.com.ua-128024.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/nastol.com.ua-128024.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/nastol.com.ua-96028.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/nastol.com.ua-96028.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/ulitsa-koshka-zabor-lezhit-kotik.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/ulitsa-koshka-zabor-lezhit-kotik.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/wpapers_ru_Два-очаровательных-котенка.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/wpapers_ru_Два-очаровательных-котенка.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies27and28/images/Одомашнивание-кошек-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies27and28/images/Одомашнивание-кошек-1.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies29and30/README.md: -------------------------------------------------------------------------------- 1 | # Задание к Практической №29 и №30 2 | 3 | # 1) Учимся использовать Stream API. 4 | 5 | Напишите программу, читающую из System.in текст в кодировке UTF-8, подсчитывающую в нем частоту появления слов, и в конце выводящую 10 наиболее часто встречающихся слов. 6 | 7 | Словом будем считать любую непрерывную последовательность символов, состоящую только из букв и цифр. Например, в строке "Мама мыла раму 33 раза!" ровно пять слов: "Мама", "мыла", "раму", "33" и "раза". 8 | 9 | Подсчет слов должен выполняться без учета регистра, т.е. "МАМА", "мама" и "Мама" — это одно и то же слово. Выводите слова в нижнем регистре. 10 | 11 | Если в тексте меньше 10 уникальных слов, то выводите сколько есть. 12 | 13 | Если в тексте некоторые слова имеют одинаковую частоту, т.е. их нельзя однозначно упорядочить только по частоте, то дополнительно упорядочите слова с одинаковой частотой в лексикографическом порядке. 14 | 15 | Задача имеет красивое решение через стримы без циклов и условных операторов. Попробуйте придумать его. 16 | 17 | Sample Input 1: 18 | 19 | Мама мыла-мыла-мыла раму! 20 | 21 | Sample Output 1: 22 | 23 | мыла 24 | мама 25 | раму 26 | 27 | 28 | Sample Input 2: 29 | 30 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sodales consectetur purus at faucibus. Donec mi quam, tempor vel ipsum non, faucibus suscipit massa. Morbi lacinia velit blandit tincidunt efficitur. Vestibulum eget metus imperdiet sapien laoreet faucibus. Nunc eget vehicula mauris, ac auctor lorem. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer vel odio nec mi tempor dignissim. 31 | 32 | Sample Output 2: 33 | 34 | consectetur 35 | faucibus 36 | ipsum 37 | lorem 38 | adipiscing 39 | amet 40 | dolor 41 | eget 42 | elit 43 | mi 44 | 45 | 46 | 47 | ## Рекомендации 48 | 49 | - Для ознакомления со Stream API рекомендую следующий [ресурс](https://metanit.com/java/tutorial/10.1.php); 50 | - В целом на youtube так же много материала по Stream Api. Мне больше всего нравится [этот](https://www.youtube.com/watch?v=WmMavkXMXDg&ab_channel=SourceCode) 51 | 52 | -------------------------------------------------------------------------------- /src/ru/mirea/exercies31and32/README.md: -------------------------------------------------------------------------------- 1 | # Задание к Практической №31 и №32 2 | 3 | # 1) Дальнейшее развитие. 4 | 5 | Наш курс подходит к концу и я хотел бы в завершение привести вам список материалов, по которым вы можете продолжить изучение Java и технологий, которые она задействует. 6 | 7 | Обязательно изучите [The 2020 Java Developer Roadmap](https://javarevisited.blogspot.com/2019/10/the-java-developer-roadmap.html#axzz6gyF2VQ5M) 8 | 9 | 10 | # 2) Spring Framework. 11 | 12 | В данной работе предлагаю вам создать простой Backend обрабатывающий самый простой запрос на Spring Framework. 13 | 14 | Для создания проекта если вы используете InteliJ IDEA Community, то используйте [Spring Initializer](https://start.spring.io/) и [данное видео](https://www.youtube.com/watch?v=TyavYh9uxHU&ab_channel=Followthewhiterabbit) 15 | 16 | Если же вы используйте InteliJ IDEA Ultimate Edition, то initiazer встроен в меню создания нового проекта. 17 | 18 | **Все что от вас требуется создать новый проект, сделать его по видео и запушить на GitHub прислав как решение данной практики** 19 | 20 | Так просто? Да вот так просто. Основная цель познакомить вас с этим инструментом и научить создать Backend. 21 | 22 | 23 | ## СПАСИБО БОЛЬШОЕ ЗА ПРОХОЖДЕНИЕ КУРСА И УДАЧИ ВАМ В ВАШИХ РАЗРАБОТКАХ 24 | -------------------------------------------------------------------------------- /src/ru/mirea/exercies8/Diagram.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemmad/JavaAllExercices/0b80e4b64f8183d73691ffcb5fc5e00db8be3e97/src/ru/mirea/exercies8/Diagram.jpg -------------------------------------------------------------------------------- /src/ru/mirea/exercies8/README.md: -------------------------------------------------------------------------------- 1 | # Задание к Практической №8 2 | 3 | 1. Создать абстрактный класс, описывающий мебель. С помощью наследования реализовать различные виды мебели. Реализовать класс магазина мебели (FurnitureShop), реализовать каталог мебели, с возможность покупки. Создать консольный интерфейс. 4 | 2. Воссоздать классы из UML диаграммы . 5 | 6 | ![alt tag](https://github.com/artemmad/JavaAllExercices/blob/master/src/ru/mirea/exercies8/Diagram.jpg?raw=true "Класс для воссоздания из диаграммы")​ -------------------------------------------------------------------------------- /src/ru/mirea/exercies9and10/README.md: -------------------------------------------------------------------------------- 1 | # Задание к Практической №9 и №10 2 | 3 | 1. Создайте класс Employee, определяющий сотрудника. Необходимые поля – Фамилия, Имя, фиксированная часть зарплаты(оклад), должность(см пункт 2). 4 | 2. Создайте интерфейс EmployeePosition, определяющий должность. Определите в нем метод String getJobTitle(), возвращающий название занимаемой должности, и double calcSalary(), возвращающий зарплату сотрудника, в соответствии с его фиксированным окладом. 5 | 3. Создайте классы, определяющие должности сотрудников. Все они должны реализовывать интерфейс EmployeePosition 6 | 7 | - Manager — зарплата складывается из фиксированной части и бонуса в виде 5% от заработанных для компании денег. Количество заработанных денег для компании генерируйте случайным образом от 115 000 до 140 000 рублей. 8 | - TopManager — зарплата складывается из фиксированной части и бонуса в виде 150% от заработной платы, если доход сотрудников рангом ниже более 10 млн рублей. 9 | - Operator — зарплата складывается только из фиксированной части. 10 | 11 | 4. Создайте класс компании Company, содержащий сотрудников и реализующей методы: 12 | 13 | - найм одного сотрудника — hire(), 14 | - найм списка сотрудников – hireAll(), 15 | - увольнение сотрудника – fire(), 16 | - получение значения дохода компании – getIncome(). 17 | 18 | Аргументы и возвращаемое значение методов выберите на основании логики работы вашего приложения. 19 | 20 | Создайте два метода, возвращающие список указанной длины (count). Они должны содержать сотрудников, отсортированных по убыванию и возрастанию заработной платы: 21 | - List getTopSalaryStaff(int count), 22 | - List getLowestSalaryStaff(int count). 23 | 24 | Аргументы и возвращаемое значение метода выберите в соответствии с логикой начисления зарплат. 25 | 26 | ## Для демонстрации и тестирования работы ваших классов: 27 | 1. Создайте компанию и наймите в неё: 180 операторов Operator, 80 менеджеров по продажам Manager, 10 топ-менеджеров TopManager. 28 | 2. Распечатайте список из 10–15 самых высоких зарплат в компании. 29 | 3. Распечатайте список из 30 самых низких зарплат в компании. 30 | 4. Увольте 50% сотрудников. 31 | 5. Распечатайте список из 10–15 самых высоких зарплат в компании. 32 | 6. Распечатайте список из 30 самых низких зарплат в компании. Примеры вывода списка зарплат Список из пяти зарплат по убыванию: 33 | - 230 000 руб. 34 | - 178 000 руб. 35 | - 165 870 руб. 36 | - 123 000 руб. 37 | - 117 900 руб. 38 | 39 | ## Рекомендации: 40 | - Можно создавать разные экземпляры компании со своим списком сотрудников и доходом. 41 | - Чтобы получить данные компании внутри класса должности, настройте хранение ссылки на Company и передавайте объект Company с помощью конструктора или сеттера. 42 | - Учтите, в методы получения списков зарплат могут передаваться значения count, превышающие количество сотрудников в компании, или отрицательные. 43 | 44 | -------------------------------------------------------------------------------- /src/ru/mirea/exercise5/Circle.java: -------------------------------------------------------------------------------- 1 | package ru.mirea.exercise5; 2 | 3 | public class Circle { 4 | private Point center; 5 | private double radius; 6 | private String color = "Red"; 7 | 8 | public Circle(Point center, double radius) { 9 | this.center = center; 10 | this.radius = radius; 11 | } 12 | 13 | public Point getCenter() { 14 | return center; 15 | } 16 | 17 | public double getRadius() { 18 | return radius; 19 | } 20 | 21 | 22 | 23 | @Override 24 | public String toString() { 25 | return "Circle{" + 26 | "center=" + center + 27 | ", radius=" + radius + 28 | '}'; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/ru/mirea/exercise5/Main.java: -------------------------------------------------------------------------------- 1 | package ru.mirea.exercise5; 2 | 3 | public class Main { 4 | 5 | public static void main(String[] args) { 6 | 7 | Circle circle = new Circle(new Point(1,1), 10f); 8 | 9 | System.out.println(circle); 10 | 11 | PointMovable pointMovable = new PointMovable(10,10); 12 | System.out.println(pointMovable); 13 | pointMovable.move(12,19); 14 | System.out.println(pointMovable); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/ru/mirea/exercise5/Movable.java: -------------------------------------------------------------------------------- 1 | package ru.mirea.exercise5; 2 | 3 | public interface Movable { 4 | public void move(int x, int y); 5 | } 6 | -------------------------------------------------------------------------------- /src/ru/mirea/exercise5/Point.java: -------------------------------------------------------------------------------- 1 | package ru.mirea.exercise5; 2 | 3 | public class Point { 4 | 5 | private int x; 6 | private int y; 7 | 8 | public Point(int x, int y) { 9 | this.x = x; 10 | this.y = y; 11 | } 12 | 13 | public int getX() { 14 | return x; 15 | } 16 | 17 | protected void setX(int x) { 18 | this.x = x; 19 | } 20 | 21 | public int getY() { 22 | return y; 23 | } 24 | 25 | protected void setY(int y) { 26 | this.y = y; 27 | } 28 | 29 | 30 | 31 | @Override 32 | public String toString() { 33 | return "Point{" + 34 | "x=" + x + 35 | ", y=" + y + 36 | '}'; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/ru/mirea/exercise5/PointMovable.java: -------------------------------------------------------------------------------- 1 | package ru.mirea.exercise5; 2 | 3 | public class PointMovable extends Point implements Movable { 4 | 5 | 6 | public PointMovable(int x, int y) { 7 | super(x, y); 8 | } 9 | 10 | 11 | @Override 12 | public void move(int x, int y) { 13 | this.setX(getX()+x); 14 | this.setY(getY()+y); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/ru/mirea/exercise5/README.md: -------------------------------------------------------------------------------- 1 | # Задание к Практической №5 2 | 3 | Вам нужно написать два класса MovablePoint и MovableCircle - которые реализуют интерфейс Movable на основе классов, 4 | разработанных в практической работе № 4. 5 | 6 | Если данных классов у вас нет для выполнения можно использовать данный репозиторий и просто форкнуть его. 7 | -------------------------------------------------------------------------------- /src/ru/mirea/exercise7/Dish.java: -------------------------------------------------------------------------------- 1 | package ru.mirea.exercise7; 2 | 3 | public abstract class Dish { 4 | //Кроме обычных классов в Java есть абстрактные классы. 5 | // Абстрактный класс похож на обычный класс. В абстрактном классе также можно определить поля и методы, но в то же время нельзя создать объект или экземпляр абстрактного класса. 6 | // Абстрактные классы призваны предоставлять базовый функционал для классов-наследников. А производные классы уже реализуют этот функционал. 7 | 8 | public void calcVolume(){ 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/ru/mirea/exercise7/Main.java: -------------------------------------------------------------------------------- 1 | package ru.mirea.exercise7; 2 | 3 | import java.util.ArrayList; 4 | 5 | public class Main { 6 | public static void main(String[] args){ 7 | Plate plate = new Plate(1,10); 8 | 9 | Dish pan = new Pan(20,100); 10 | 11 | plate.calcVolume(); 12 | ((Pan)pan).makeBorsh(); 13 | 14 | ArrayList allDishes = new ArrayList<>(); 15 | allDishes.add(plate); 16 | allDishes.add(pan); 17 | 18 | 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/ru/mirea/exercise7/Pan.java: -------------------------------------------------------------------------------- 1 | package ru.mirea.exercise7; 2 | 3 | public class Pan extends Dish{ 4 | int radius; 5 | int deep; 6 | double volume; 7 | 8 | public Pan(int radius, int deep) { 9 | this.radius = radius; 10 | this.deep = deep; 11 | } 12 | 13 | @Override 14 | public void calcVolume() { 15 | volume = radius* deep* 10; 16 | } 17 | 18 | public void makeBorsh(){ 19 | System.out.println("Borsh svaren"); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/ru/mirea/exercise7/Plate.java: -------------------------------------------------------------------------------- 1 | package ru.mirea.exercise7; 2 | 3 | public class Plate extends Dish{ 4 | 5 | int radius; 6 | int deep; 7 | double volume; 8 | 9 | 10 | 11 | public Plate(int radius, int deep) { 12 | this.radius = radius; 13 | this.deep = deep; 14 | calcVolume(); 15 | } 16 | 17 | //Производный класс обязан переопределить и реализовать все абстрактные методы, которые имеются в базовом абстрактном классе. 18 | // Также следует учитывать, что если класс имеет хотя бы один абстрактный метод, то данный класс должен быть определен как абстрактный. 19 | @Override 20 | public void calcVolume() { 21 | volume = radius * deep; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/ru/mirea/exercise7/README.md: -------------------------------------------------------------------------------- 1 | # Задание к Практической №7 2 | 3 | 1. Создать абстрактный класс, описывающий посуду (Dish). С помощью наследования реализовать различные виды посуды, имеющие свои свойства и методы. Протестировать работу классов. 4 | 2. Создать абстрактный класс, описывающий собак (Dog). С помощью наследования реализовать различного вида пород собак. Протестировать работу классов. --------------------------------------------------------------------------------