Обучение программированию c#

Формула программиста

основатель — Волосатов Евгений Витольдович

Клуб формулистов - Ежемесячная подписка

Вступление в Клуб Формулистов на выгодных условиях для НОВЫХ участников.

После взноса 512 256 руб. вы получите подписку
в Клуб Формулистов на 30 дней и 256 байт для быстрого старта.
Байты используются для открытия более одного урока в день, по 50 байт за урок.

Стоимость 1 дня за первый месяц: всего 8 рублей.

Первый взнос - 256 руб./30 дней.

Через 30 дней будет списано 3,000 2,400 руб.
за продление подписки в Клуб на 30 дней + подарок 512 байт.

Так будет продолжаться каждые 30 дней, пока вы не отмените подписку.
Средства будет автоматически считываться с вашей карты.
Вы в любой момент сможете отказаться от продления Клуба.

Только ДО КОНЦА НЕДЕЛИ -
-50% скидка на первый взнос, всего 256 рублей!
-20% скидка на ЕЖЕМЕСЯЧНЫЙ платёж!
Всего 2400 руб/месяц (вместо 3000 руб/месяц), или 80 руб./день - цена чашки кофе.


Стоимость 1 дня: 80 руб.

Хочу вступить!

Также есть другие варианты оплаты участия в КФ:

Билет в клуб формулистов на ...
30+ дней | 60 дней | 150 дней | 380 дней | 1000 дней

Внимание!
Стоимость участия в Клубе формулистов увеличивается 1 числа каждого месяца на 100 рублей.
При оформления подписки стоимость остаётся постоянной, пока подписка не будет отменена.







Первый взнос - 512 руб./30 дней + 512 байт.
Последующие взносы - 3,000 2400 руб./месяц + 512 байт.



Список уроков | фото | видео

# Название видеоурока Видео / Тесты Решило Рейтинг Доступ
1 Подготовка - Фрукты по списку 00:12:36
2 теста
40 чел. ★ 5 Done
  На этом уроке мы познакомимся с перечислением Enum.
Фактически - это набор именных констант в одной упаковке.
Перечисления в языке Java представляют из себя класс,
который предоставляет много интересных возможностей.

Преимущества использования перечислений:
+ Все константы собраны под одним именем.
+ Можно проверить наличие строчного значения в списке.
+ Можно в цикле перебрать все константы.
+ Оператор выбора switch на основе перечисления исключает ошибки.
+ Можно использовать как константную справочную базу данных.

Самостоятельное задание:
Создайте перечисление по дням недели - от MONDAY до SUNDAY.
Введите с клавиатуры строку и проверьте, является ли она днём недели.
Выведите название введённого дня недели на русском языке (switch-case).
Выведите на экран список всех дней недели, кроме введённого.

Отчёт отправил: 10558. Иван Воронин Выполнено за 20 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Заметил, что появились ещё пару уроков в этом курсе, поэтому решил выполнить, так как они в самом начале, а значит должны быть простенькие. Добавил день недели UNKNOWN, для значения по умолчанию, если вдруг будет введено слово не относящееся к дню недели и переменной не будет присвоено новое значение. Удобнее. Выполнил доп. задание со звёздочкой, как видно на скриншотах. 
2 Подготовка - База фруктов 00:18:10
1 тест
33 чел. ★ 5 Done
  На этом уроке мы увидим интересные возможности перечислений enum в языке Java.
Оказывается каждое слово - это не просто константное числовое значение,
а целый экземпляр класса, в котором можно размещать справочную информацию.
Получается целая константная база данных - справочник!

Рекомендуемая литература:
http://interviewinit.com/2014/04/java-enumerations-особенности/
15 вопросов на собеседование относительно Enum, с ответами:
http://info.javarush.ru/translation/2015/10/13/15-вопросов-для-собеседования-разработчиков-относительно-Enum-в-Джаве-с-ответами-.html


Самостоятельное задание
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: фишкам в enum 
Сложности: найти время 
Комментарии: Реализовал на основе дней недели (решил модернизировать прошлый урок на основе фишек этого и добавил свои). Добавил поддержку ввода дней недели в любом регистре как на английском, так и на русском языке. Добавил метод спряжений написания слов (а то глаза режет). Добавлена поддержка если введённый день недели не является таковым. Добавил подробную статистику: 1 - сколько прошло дней после последнего введённого дня недели до текущего введённого. 2 - сколько всего прошло дней, по окончании ввода дней недели. 3 - сколько уникальных дней недели было использовано при вводе. 4 - сколько раз один и тот же день недели использовался при вводе. Создал батники для генерации и запуска jar файла. Создал текстовый файл с днями недели, чтобы не вводить постоянно в консоли =) з.ы. Отличнейший урок, очень полезные знания по поводу enum в java, ОГРОМНОЕ спасибо за наводку =)  
3 FREE Постановка задачи 00:11:50
2 теста
45 чел. ★ 5 Done
  Мы начинаем создание Java-проекта
на основе задачи про Деда Мороза,
который дарил детям фрукты.

При создании проекта вы сможете проникнуться духом Явы
и прочуствовать во всей красе суть объектно-ориентированного подхода.
Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Как минимум можно вынести ридер в отдельный метод, подобное уже делал в уроке: Буферный чтец. Так же можно вынести в отдельный метод бесконечный цикл. Массив сделать глобальным, чтобы можно было получать доступ из других методов, которые могут быть созданы в будущем. з.ы. ничего стараюсь не менять, чтобы идти в ногу с уроками =) 
4 Яблоки на снегу 00:15:44
2 теста
42 чел. ★ 5 Done
  На этом уроке мы добавим в нашу программу перечисление - enum Fruit.
Таким образом мы сможем изменять список допустимых фруктов,
не меняя основную программу.
Отчёт отправил: 10558. Иван Воронин Выполнено за 20 мин. [Показать отчёт]
Научился: созданию методов в enum 
Сложности: найти время 
Комментарии: Ещё очень много лет назад, столкнувшись с try/catch, спустя какое-то время понял одну истину: "переменными надо объявлять заранее, давая им значение по умолчанию, а уже в теле try/catch пытаться присваивать необходимые значения, если это не вышло, то значение остаётся тем, что было присвоено ДО!!!". Тем самым мы можем один раз возвратить в конце значение переменной, не дублируя строки кода. 
5 Фрукточтец 00:11:51
2 теста
40 чел. ★ 5 Done
  На этом уроке мы создадим класс FruitReader,
в который перенесём алгоритм считывания начальных данных.
Таким образом основная программа значительно упростится.

Создайте текстовы файл "fruits.txt".
На нескольких строчках напишите названия фруктов.
Не забудьте в конце файла два раза нажать Enter.
Разместите файл в корень проекта.
Попробуйте открыть файл, указав полный путь с именем.
Отчёт отправил: 10558. Иван Воронин Выполнено за 20 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Ну как минимум первое что нужно, это добавить проверку на наличие файла. Ещё по поводу того, что в конце файла надо оставлять 2 пустых строчки для корректной работы, может лучше добавить проверку на EOF в цикле, если идёт парсинг файла, а не с клавиатуры. Можно добавить выбор откуда брать данные, из файла или вручную вносить, если файла нет, создавать новый и сразу предлагать вносить вручную. Так же можно при вносе вручную, добавлять всё вносимое в конец файла. 
6 Фрукты из строки 00:14:40
2 теста
39 чел. ★ 5 Done
  На этом уроке мы напишем метод,
который сконвертирует строчку в объект BufferedReader.
Таким образом мы сможем задачу по заполнению коллекции
фруктов из строки делегировать уже созданному методу Read().

Теперь наш класс FruitReader стал чересчур универсальным, и это не очень хорошо.
Мы его разделим на несколько составных частей,
каждая часть будет отвечать за свой инструментарий.
Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Ещё на прошлом уроке хотел спросить, почему использовали protected, а не private в файле FruitReader для метода с циклом перебора. Это потому что теперь мы его наследуем? На скриншоте я показал свою реализацию, чтобы небыло конфликта в перегрузке, просто для чтения из файла передают тип File, а строка String, при этом перегрузка остаётся целенькой =) 
7 Волшебные конструкторы 00:18:40
2 теста
34 чел. ★ 5 Done
  На этом уроке мы рассмотрим несколько способов,
как можно оформить содержимое наследников класса FruitReader.
Какие будут преимущества и недостатки при их использовании из основной программы.

В конечном итоге мы реализуем всё через волшебные конструкторы наследников.
В основной программе алгоритм вычислений вынесем в отдельную функцию.
Избавимся от статика и удивимся, как удобно теперь можно изменять
тип источника данных - нужно всего лишь менять вызов конструктора.
Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт]
Научился: Выносить наследование в отдельные файлы. 
Сложности: найти время 
Комментарии: Отличный урок, по поводу null согласен полностью, по поводу того, что надо при это возвращать список, естественно, потому что даже если он пустой, метод должен вернуть в том типе пустоту, в котором возвращает когда что-либо есть. 
8 Фруктовые комментарии 00:21:08
2 теста
30 чел. ★ 5 Done
  На этом уроке мы займёмся документированием созданных классов и методов.
Мы будем использовать javadoc-стиль для автоматизации процесса создания документации.
Отчёт отправил: 10558. Иван Воронин Выполнено за 40 мин. [Показать отчёт]
Научился: Закрепил использование javadoc 
Сложности: найти время 
Комментарии: Отличный и очень полезный урок, документация очень нужна, особенно когда работаешь в команде. 
9 Новые игрушки 00:12:51
1 тест
30 чел. ★ 5 Done
  На этом уроке мы попробуем расширить диапазон игрушек в мешке Деда Мороза.
Сначала попробуем это сделать через обобщение, и окажемся в тупике.
В конце урока мы найдём простое правильное решение,
и выясним, почему стоит делать именно так.
Совет: сначала посмотрите видео полностью, не внося изменений в код.
Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: По поводу статичных перечислений полностью поддерживаю, только так и надо было изначально делать, только назвать надо будет енум не Fruit, а както более абстрактно: Present или Gift з.ы. по поводу динамических перечислений чере БД, не обязательно, можно так же в файле хранить эти самые перечисления, чтобы не перекомпилировать заново программу, просто менять контент файла, а программа будет его при каждом запуске кэшировать и использовать как статику. Можно даже через параметр использовать нужный файл с перечислениями, таким образом использовать группы перечислений в связи с теми или иными случаями (Новый год, Хэлоуин и т.д.) з.ы. конфиг файл тоже никто не отменял, если не хочется использовать параметры запуска, хотя они удобные. 
10 Какие ваши аргументы? 00:13:36
2 теста
28 чел. ★ 5 Done
  На этом уроке мы сделаем управление нашей программой через аргументы командной строки.
В этом случае мы сможем легко изменять источники входных данных.
Не нужно больше менять и компилировать исходный код.
Отчёт отправил: 10558. Иван Воронин Выполнено за 1 час. 40 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: При запуске с параметром -file ../../../presents.txt отрабатывает корректно, в IntelliJ IDEA вон он аж где, относительно скомпилированных файлов *.class Добавил метод генерации строчки подарков из массива аргументов, см. скриншот. Добавил методы генерации красоты в консоли =) использовал псевдографику. 
11 Рефакторинг аргументов 00:10:39
1 тест
26 чел. ★ 5 Done
  На этом уроке мы перенесём проверку
аргументов командной строки в отдельную функцию.
Попутно исправим некоторые недочёты и ошибки.

Обоснуйте своими словами, почему мы решили
не создавать отдельный класс для проверки аргументов?
Отчёт отправил: 10558. Иван Воронин Выполнено за 20 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Всё же проверять вначале на предмет отсутствия параметров следует, не стоит обобщать проблемы, я придерживаюсь всегда к точки зрения: "Конечного пользователя надо тыкать носом, чтобы он понял где его ошибка, а не посылать курить мануалы (выдавать описание) из-за, возможно, банальной проблемы, можно же указать конкретно и ниже выдать мануал." По поводу распарсивания списка подарков, реализовал ещё на прошлом уроке, на этом уроке переделал под StringBuilder. По поводу того, что не нужно для парсинга аргументов создавать доп класс, ну как минимум потому, что эти аргументы приходят в основной класс программы, для их обработки достаточно добавить метод/функцию, так как в нашем случае это  не что-то сложное, всё что было сложным (FruitReader*) уже вынесли в отдельные Классы. 
12 Пошаговый проход 00:13:05
1 тест
25 чел. ★ 4.9 Done
  На этом уроке мы вынесем проверку аргументов в отдельную функцию.
После этого займёмся исправлением ошибки,
которая возникает при отсутствии \n в конце строк.
Чтобы проще было найти ошибку, и улучшить понимание струкутры программы в целом, мы выполним пошагово всю программу, посмотрим на содержимое переменных и доберёмся до сути той ошибки.
Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт]
Научился: Узнал, что в catch не присваивается нужное значение переменной. 
Сложности: найти время 
Комментарии: По поводу того, что в catch не присваивается нужное нам значение, это прям подстава, хорошо что есть дебаг. Добавил значение null перед тем как пытаемся читать из br, теперь нет надобности присваивать это в catch (всё равно ему веры нет). Добавлена проверка на null, по поводу того, что вначале проверяется первое условие, и если оно ложно он не проверяет следующие знал уже давно, ещё с C#, там так же. Наконец убрали эти ненужные пустые строки в файле и вообще, давно ждал, как же это будет реализовано, сам ничего не делал, так как уже не мало изменений внёс =) 
13 Массивная строка 00:20:56
2 теста
25 чел. ★ 5 Done
  На этом уроке мы создадим класс FruitReaderStringArray,
в который вынесем алгоритм формирования строчки из массива.
Урок длинный - очень много подробных объяснений -
что мы делаем, почему мы делаем именно так.
Отчёт отправил: 10558. Иван Воронин Выполнено за 20 мин. [Показать отчёт]
Научился: Arrays.copyOfRange 
Сложности: найти время 
Комментарии: Arrays.copyOfRange - тут мы не отнимали -1 в от длинны массива, потому что это происходит автоматически, как в C# при использовании Random.Next Перенёс ранее созданную функцию на базе StringBuilder, так же убрал ненужное добавление в самом конце, так как этот момент уже не критичен. 
14 Логические задачи 00:18:14
1 тест
25 чел. ★ 5 Done
  На этом уроке мы начнём наращивать функционал нашего проекта.
Создадим класс Logic, в котором реализуем несколько методов.
Каждый метод будет решать одну задачу по списку фруктов.
Отчёт отправил: 10558. Иван Воронин Выполнено за 30 мин. [Показать отчёт]
Научился: Collections.frequency 
Сложности: найти время 
Комментарии: В методе getCount просто вернул размер списка, зачем там лишние переменные. В методе getPresentCount использовал Collections.frequency, намного быстрее (см. скриншот) з.ы. Провёл полный рефакторинг, заменил везде слово Fruit на Present, а то глаза мозолит =) Благо в IntelliJ IDEA это можно сделать в пару кликов. 
15 Размер множества 00:10:27
2 теста
24 чел. ★ 5 Done
  На этом уроке мы продолжим работу над классом Logic.
Напишем два разных способа решения одной задачи:
Сколько разных фруктов в мешке у Деда Мороза?

Самостоятельное задание:
сделать пошаговое выполнение новых функций.
Отчёт отправил: 10558. Иван Воронин Выполнено за 40 мин. [Показать отчёт]
Научился: Подсчёту количества элементов массива/списка разными способами 
Сложности: найти время 
Комментарии: Я провёл доп. исследования и добавил ещё один способ подсчёта количества уникальных объектов (см. скриншоты). Как видно из скриншотов, этот метод начинает показывать себя с большими объёмами данных, с более мелкими он не такой шустрый как другие два, но кто мешает использовать их вкупе =) 
16 Список задач 00:13:43
1 тест
23 чел. ★ 5 Done
  На этом уроке мы составим список всех решаемых задач.
У нас будет функция, которая запускает все задачи друг за другом.
Также мы создадим ещё одно перечисление из всех возможных задач.
Отчёт отправил: 10558. Иван Воронин Выполнено за 20 мин. [Показать отчёт]
Научился: Повторение пройденного 
Сложности: найти время 
Комментарии: Судя по скриншотам, надо оптимизировать поиск подарка, который чаще всего дарили. По поводу отображения результатов, ну у меня своя версия =) а так да, надо добавить выбор в каком формате отображать, может кому-то надо компактно, без картинки деда-мороза =) 
17 Форматы JSON и XML 00:12:02
1 тест
21 чел. ★ 5 Done
  На этом уроке мы переделаем класс Logic,
чтобы он мог возвращать результаты расчётов
в совершенно разных форматах - RAW, JSON, XML.
Отчёт отправил: 10558. Иван Воронин Выполнено за 20 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: На скриншотах видно JSON и XML форматы, так же добавил теги потраченного времени на получение данных по тому или иному тегу. 
18 Профессиональный Интерфейс 00:12:12
2 теста
19 чел. ★ 5 Done
  На этом уроке мы создадим интерфейс Convertable.
Он поможет нам выделить из класса Logic задачи по конвертации.
Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт]
Научился: Созданию интерфейса 
Сложности: найти время 
Комментарии: О HashMap, отлично, ещё на прошлом уроке подумал про него, но чтобы оптимизировать скорость работы со списком подарков, поглядим для чего создаём интерфейс =) 
19 Коллекция HashMap 00:11:14
2 теста
19 чел. ★ 5 Done
  На этом уроке мы создадим в классе Logic метод,
который запишет результаты вычислений в словарь -
то есть в коллекцию HashMap.
Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт]
Научился: Формированию словаря HashMap 
Сложности: найти время 
Комментарии: Минимум изменений, свой метод для вывода Деда-Мороза даже корректировать не надо было, но на прошлом уроке я его оптимизировал, теперь метод принимает на вход динамическое количество строк, обрабатывает их и выводит. Что такое интерфейс после этого урока я понял для себя так: Это очень напоминает навыки, если кто-либо инплементит себе тот или иной навык, он обязан описать его так, как он его реализует для себя, даже если разные классы имплементят один и тот же навык, это не значит, что их реализации данных навыков будут 1х1 совпадать, совпадают они лишь типами ввода/вывода данных, а как они будут обрабатывать их, это уже дело каждого класса, как говорится, взять в руки клавиатуру может каждый, но все будут владеть ею по разному, кто-то кодить, кто-то в игрушки играть, а кто-то бояться трогать =))))))) 
20 Конвертабельные классы 00:12:23
2 теста
19 чел. ★ 5 Done
  На этом уроке мы сделаем три новых класса,
каждый из которых реализует интерфейс Convertable.
В каждом классе будет всего одна функция - Convert(),
которая из словаря создаёт нужную структуру данных.
Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт]
Научился: Закрепил работы с интерфейсом 
Сложности: найти время 
Комментарии: С тех пор как добавили вывод данных в формате JSON хотелось, чтобы числовые данные были без двойных кавычек, вот решил на этом уроке это реализовать (см. скриншоты) так формат более корректный. По поводу того, что такое интерфейс на прошлом уроке изложил свои мысли, с тех пор они не изменились, все сотрудники прошли курсы по конвертации но каждый в итоге придумал свой уникальный метод, хотя и делают они технически одно и тоже, просто итог разный =) 
21 Параметр Формата 00:16:18
1 тест
18 чел. ★ 5 Done
  На этом уроке мы обсудим возможность управления
форматом вывода результата нашей программой
через передачу параметра командной строки:
java Program [-format json|xml|raw]
Отчёт отправил: 10558. Иван Воронин Выполнено за 30 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Реализовал систему парсинга параметра -format. Добавил систему поиска точки отсчёта параметров загрузки данных, чтобы если ввели -format -scan корректно был найден -scan (см. скриншот). Вначале думал, времени нет, всё равно будем это делать на след уроке, но всё же не смог удержаться, решил реализовать, тем-более, что это было не сложно и даже интересно =) 
22 Параметрический Созидатель 00:12:34
2 теста
15 чел. ★ 5 Done
  На этом уроке мы так и не реализуем функцию parseArgsConvert().
Вместо этого мы организуем более общий подход к анализу аргументов.
Разделим список всех аргументов на составные части по их назначению.
И подготовим функцию create(), которая будет созидать каждую часть.
Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Не стал ничего делать, интересно посмотреть что из этого выйдет, но я уже понял смысл, он более универсальный, когда его реализуем, можно будет запускать программу передавая параметры в любом порядке, примеры: -format json -scan -scan -format xml и т.д. отличная идея! 
23 Создатель 00:15:59
2 теста
15 чел. ★ 5 Done
  На этом уроке напишем функцию create.
Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Раз добавили видео после того как я прошёл курс, решил в этом видео сравнить вариант предложенный в видео и вариант которые использовал сам (см. скриншот). Как видим из скриншота, вариант из видео медленнее примерно на 10% и чтобы он корректно работал, необходимо добавить перегрузку в класс обработки данных переданных через командную строчку. Мой же вариант никаких дополнительных изменений в коде не требует. з.ы. Как видим из скриншота, я использовал максимально возможно длинную строчку командной строки (8кб) этого было мало для теста, поэтому решил ещё каждый из вариантов запустить по 10000 раз итого: 10000 * 1113 (подарков как видно из скриншота) = 11 миллионов 130 тысяч подарков. 
24 Как шагает Дед Мороз 00:11:25
1 тест
15 чел. ★ 5 Done
  На этом уроке мы пошагово выполним всю программу,
увидим, как параметры командной строки разделяются
на несколько списков и поочерёдно обрабатываются.
Отчёт отправил: 10558. Иван Воронин Выполнено за 30 мин. [Показать отчёт]
Научился: Повторение пройденного 
Сложности: найти время 
Комментарии: Ошибки связанные со сравнением строк не исправлял, так как у меня их небыло, по причине отсутствия урока на котором реализовали метод create(). Реализовал его по своему, так же реализовал поддержку -format (см. скриншоты). 
25 Конвертабельность 00:09:41
1 тест
15 чел. ★ 5 Done
  На этом уроке мы наконец-таки проанализируем параметры
командной строки и создадим нужный экземпляр конверт.
Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Всё это реализовал сам, но видео просмотрел =) 
26 Фабрика параметров 00:14:42
1 тест
15 чел. ★ 5 Done
  На этом уроке мы наконец-таки закончим создание основной части программы.
Мы создадим класс ParamFabric, в который перенесём весь парсинг аргументов.
Останется только оформить документацию - написать комментарии.

Отчёт отправил: 10558. Иван Воронин Выполнено за 20 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Создал мини методы для работы с файлом, строкой данных и выбором формата отображения (см. скриншот). 
27 Буфера в стрингах 00:19:58
2 теста
14 чел. ★ 5 Done
  На этом уроке мы пройдёмся по всему коду программы
и сделаем небольшие улучшения кода.
В основном мы будем заменять
String на StringBuffer в тех местах,
где происходит итеративное формирование строк.

Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Сразу использовал StringBuilder (а не StringBuffer), когда начали использовать подобные склеивания. Мини методы в ParamFactory были реализованы ещё в прошлом уроке. По убирал ненужны public по всему коду, где надо поставить private, так как protected не вижу смысла. 
28 Документация Деда Мороза 00:26:00
1 тест
12 чел. ★ 5 Done
  На этом уроке мы опять пройдёмся по всему проекту
и допишем документируемые комментарии.
Затем создадим HTML-документацию
используя утилиту JavaDoc.
Отчёт отправил: 10558. Иван Воронин Выполнено за 30 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Везде добавил комментарии, для своих доп. методов тоже. Создал батник для генерации документации (предварительно очищая папку в которой они создаются). Проверил, создаётся документация только для публичных классов/енумов/интерфейсов и т.д. з.ы. У вас в классе ParamFactory в методе getConvert не нужно возвращать ничего, просто поставить надо void, а последнюю строчку: "return null;" заменить на: "else convertable = new ConvertRaw();" 
29 Задедомороженный Архив 00:12:05
1 тест
21 чел. ★ 5 Done
  На этом уроке мы запакуем весь архив в один файл, используя утилиту jar.
В таком виде удобно копировать и распространять программу -
вместо огромного количества файлов - всего один архив.
Отчёт отправил: 10558. Иван Воронин Выполнено за 15 мин. [Показать отчёт]
Научился: Повторил пройденное 
Сложности: найти время 
Комментарии: Ошибок у меня небыло, ещё на прошлом уроке заметил эту ошибку у вас в этом методе, но решение проблемы глубже, зачем возвращать convertable если она и так глобальная для класса ParamFactory. Создал несколько батников для демонстрации работы jar (см. скриншот). 
30 Комплименты Деду Морозу без видео
1 тест
18 чел. ★ 5 Done
  Поздравляю с завершением
Объектно-Ориентированного-Проекта
на примере решения задачи про Деда Мороза.

Пожалуйста, оставь отзыв об этом видеокурсе.
Что тебе понравилось, что не понравилось,
что можно было бы сделать лучше,
в свободной новогодней форме.
Отчёт отправил: 10558. Иван Воронин Выполнено за 10 мин. [Показать отчёт]
Научился: Созданию полезного консольного кросс-платформенного ПО 
Сложности: найти время 
Комментарии: Отличнейший курс, то, что было создано на этом курсе, это просто неописуемо словами, теперь можно реализовать великое множество аналогичных приложений по получению данных и выводу их куда угодно и в чём угодно. Подобные приложения активно используются везде, от простой консоли до сервисов на серверах для различных нужд. Огромное спасибо за этот курс, просто отличная практика для изучения языка java, идеальная демонстрация ООП. з.ы. Давно уже было желание оптимизировать скорость обработки подарков, но ждал, может это будет реализовано, в итоге нет, вот решил оптимизировать сам, так как изменения минимальные и давно уже висели у меня в голове, наконец я их реализовал и теперь можно спать спокойно, а то такая крутая софтинка и так долго считает количество уникальных или определённых подарков. После оптимизации скорость работы мгновенная (см. скриншот) при этом изменения были минимальны, логика приложения не пострадала, всё работает так как и задумывалось, просто оптимизировано хранение объектов. Теперь можно считать что угодно и как угодно в доль и поперёк =) з.з.ы. На скриншоте видно две версии ПО, оптимизированная (27 урок) и до оптимизации (26 урок), убрал бесполезные медленные способы подсчёта, так как теперь единственный верный остался, добавил для демонстрации пару новых задач: подсчёт лимонов и теста, в любом случае, скорость не то чтобы отличается в разы, после оптимизации всегда 0мс и это при обработке 9 миллионов подарков =) 
  Итого:   30 видеоуроков 7 час. 04 мин.
46 тестов
11 чел. ★ 5  
  Финалисты:   Новопашин Владимир,   Иван Воронин,   Алексей В.,   Tekashnik,   Сергей Соколов,   Константин,   Валерий Жданов,   Станислав,   Andrej Petrunev,   Chip,   Dmitry Sinitsin .

Начинаем практику по языку C#





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Отличный курс, пожалуй самый лучший что я проходил на этом сайте. Код получившийся в итоге для меня весьма взрослый, который можно использовать в качестве заготовок для своих работ. Магистр сильно прибавил и это радует)


Научился: Хороший пример создания ООП программы. Всё наглядно и понятно. В видеокурсе непонравилось частое редактирование кода. Очень радует, что Деда Мороза миновал кризис, и вместе с фруктами он дарит спорткары ! :)
-----