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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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







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



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

# Название видеоурока Видео / Тесты Решило Рейтинг Доступ
1 FREE Singleton - Intro 00:05:31
57 чел. ★ 4.9 Done
  Рекомендуемая литература:

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 13 мин. [Показать отчёт]
Научился: Singlton(Одиночку) в здравом уме и твердой памяти не использовал. Уместен этот шаблон когда в программе нужен глобальный объект с доступом из любого класса да ещё и с возможностью регулировать время его жизни. Статический класс хорош для описания, к примеру, неизменных математических функций. Singlton актуален для единственного процесса в программе, с гарантией запрета появления его дубликата. getInstance() при первом обращении создает экземпляр и его возвращает При последующих обращениях возвращает текущий объект. Статические методы ГОРАЗДО быстрее синглтона. Синглтон годен для наследования и полиморфизма (в отличие от статики). 
2 Singleton - Config - Final 00:06:48
45 чел. ★ 5 Done
  Мы начинаем серию коротких уроков по созданию класса
считывания данных из конфигурационного файла.
Для начала мы организуем несколько конфигурационных параметров
в виде констант и расположим их в основном классе Program.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 56 мин. [Показать отчёт]
Научился: класс Одиночка создаёт единожды (getInstance()) свой экземпляр и возвращает при повторных запусках (getInstance()) тот же текущий экземляр, а не новые и не позволяет повторить это же действие извне (Cat cat = new Cat();- так не прокатит с Синглтоном) final - такую константу изменить нельзя Не нашел методом тыка, как в Eclipse из sysout получить system.out.println Погуглил. Нашел решение - CTRL+SPACE Из статичного метода нельзя обращаться к нестатичному контенту 
3 Singleton - Config - Git init 00:03:42
1 тест
45 чел. ★ 5 Done
  На этом уроке мы про инициализируем git репозиторий
для проекта, который мы создали на прошлом уроке.
Систему git мы будем использовать для контроля версий
наших исходников, коммититить рабочие варианты
решения одной и той же задачи, да и просто
дополнительная практика использования git в разработке.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 21 мин. [Показать отчёт]
Научился: второй подход к штанге git Mokytojas == Учитель В папке создали репозиторий git git init - инициализация репозитория (контроль версий начат) git status - текущее состояние репозитория git add Program.java - начать отслеживать изменения в указанном файле git commit -m "Final consts" - записать в репозиторий (ЛОКАЛЬНЫЙ) первое состояние отслеживаемого файла git log - журнал событий После этих действий появилась скрытая папка git  - это локальный репозиторий, где будут падать все коммиты (Ваши записи о текущем состоянии файлов и кода в них на момент коммита) 
4 Singleton - Config - Static 00:09:39
44 чел. ★ 5 Done
  На этом уроке мы продемонстрируем, как
обращаться к константам из отдельного класса.
Для этого мы создадим новый класс Process(),
добавим в него метод demo(), в котором реализуем
вывод данных из констант класса Program().
Константы необходимо будет сделать статичными.
Так же мы порефакторим имена констант,
чтобы они были по стандарту ЗАГЛАВНЫМИ буквами.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 30 мин. [Показать отчёт]
Научился: доступ к статической переменной из другого класса выполняется указанием имени класса + точка + имя переменной ALT + SHIFT + R - хоткей для переименования переменной(константы) во всех местах её доступности одновременно из одного места Статические переменные невозможно редактировать и нельзя установить извне Преимущество группировки данных в отдельном конфигурационном файле в лёгкости замены конфигурации - сменил файл-класс = разом сменилась конфигурация 
5 Singleton - Config - Git add 00:02:20
42 чел. ★ 5 Done
  На этом уроке мы зафиксируем очередные изменения
нашей программы с помощью команды commit в git репозитории.
Для начала мы посмотрим, что изменилось с последнего коммита.
Добавим изменённый и новый файлы на сцену и
закоммитим их в историю репозитория для фиксации
очередной рабочей версии нашей программы.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 21 мин. [Показать отчёт]
Научился: git status == покажет появившиеся новые в проекте файлы и измененные имеющиеся под надзором Системы Контроля Версий git add Process.java == добавим под присмотр новый файл-класс git commit -a == закоммитить изменения в отслеживаемых файлах, без добавления нетрекингуемых новых файлов git log == журнал активности СКВ 
6 Singleton - Config - Class 00:05:13
40 чел. ★ 5 Done
  На этом уроке мы выделим всё, что касается
конфигурации в отдельный класс.
Для этого мы создадим новый класс Config()
и перенесём туда наши константы.
Так же нам нужно будет исправить появившиеся ошибки,
указав новое расположение констант.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 32 мин. [Показать отчёт]
Научился: у Java нет глобального пространства имён Переменные видны в каком-то определённом классе Для доступа к переменной УКАЖИ имя класса или название экземпляра Модификатор static позволяет обращаться к переменной из любого класса Статическим переменным при запуске программы выделяется участок памяти, что при больших программах не лучший вариант Доступ к статическим переменным неавторизованный - как в вагон метро входит и считывает внутреннее убранство кто хочет и когда хочет 
Сложности: найти где в Эклипс увеличить шрифт. Спрятано здесь: контекст (ПКМ) - General - Appearance - Colors and Fonts - Java Editor Text Font - Edit Спрятано на пять баллов, без навыков гугления, я найти эти дебри на смог 
7 Singleton - Config - Git commit 00:02:16
1 тест
39 чел. ★ 4.9 Done
  На этом уроке мы заново попрактикуемся в работе с git.
Вначале мы попробуем закоммитить изменения,
но увидим, что новый файл не попал в коммит.
Так как он не отслеживался системой git, его необходимо
вначале добавить на сцену и только потом закоммитить.
В дальнейшем система git будет отслеживать
изменения данного файла автоматически.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 24 мин. [Показать отчёт]
Научился: git status == посмотреть текущее состояние дел в отслеживаемом каталоге git commit -a -m "some comment for this commit" == перенести отслеживаемые файлы из отслеживаемой директории(Working Area), минуя индекса(Staging Area), сразу в локальный репозиторий Repository (БЕЗ НОВОПОЯВИВШИХСЯ ФАЙЛОВ И ПОТОМУ НЕОТСЛЕЖИВАЕМЫХ) git diff == производит сравнение между разными состояниями одного файла 
8 Singleton - Config - FileReader 00:11:45
1 тест
39 чел. ★ 5 Done
  На этом уроке мы с вами доработаем класс Config(),
чтобы параметры хранились и загружались из файла.
Для этого создадим файл конфигурации,
перенесём в него настройки программы и
в классе Config() добавим метод считывания
из нашего конфигурационного файла.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 25 мин. [Показать отчёт]
Научился: рабочая директория программы при запуске - корень проекта, а не bin или src При считывании строки пользуемся простым методом readLine При считывании числа, чтобы оно не осталось строкой, его обрабатывают классом Integer методом parseInt, передавая в него аргументом считываемую строку Чтобы получить доступ к методам иного класса, в каждом методе требуется создать экземпляр того класса, к которому происходит запрос Статик не годится, когда придётся менять значение переменных (к примеру при считывании их значений из конфигурационного файла) Когда убрали статик, пришлось в каждом методе создавать экземпляр класса Config - получается дублирование одного и того же действия в угоду получения доступа к переменным в другом классе 
9 Singleton - Config - Git default 00:04:39
1 тест
36 чел. ★ 5 Done
  На этом уроке мы закоммитим все наши изменения.
Для начала мы создадим копию конфигурационного файла
с именем config.default.txt. Это необходимо делать,
чтобы небыло конфликтов из-за того, что у каждого разработчика
будет своя версия config.txt для корректной работы приложения.
Так же изменим значения файла config.default.txt
на значения для примера, чтобы каждый смог изменить их под себя.

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 38 мин. [Показать отчёт]
Научился: для загрузки в репозиторий переименовали конфигурационный файл в config.default.txt + я перетащил его в подкаталог src (НЕ ЗАБЫТЬ!) git add config.default.txt - добавили в индекс (STAGE AREA) git commit -a -m "somecomment" -залить в локальный репозиторий все измененные файлы git diff 0023 - первые цифры(литеры) из идентификатора коммита который сравнивается КРАСНЫМ - то что удалено ЗЕЛЕНЫМ - то что стало СЕРЫМ - нетронутое 
10 Singleton - Config - Static field 00:09:57
36 чел. ★ 5 Done
  На этом уроке мы поэкспериментируем с оптимизацией
загрузки конфигурационного файла.
Остановимся на варианте глобальной версии
с передачей в другие классы в качестве параметра.
Так же закоммитим наши изменения в git репозиторий.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 51 мин. [Показать отчёт]
Научился: вынесли из методов создание экземпляра класса Config  в тело класса Program, добавили модификатор static и передали экземпляр config аргументом в вызов метода demo При варианте инициализации config в теле класса Process с использованием конструктора, не забываем, что передачу config аргументом в метод надо убрать, а этот же аргумент передать в создаваемый экземпляр класса  
11 Singleton - Config - Static class 00:06:31
33 чел. ★ 5 Done
  На этом уроке мы продолжим оптимизации,
сделав всё в классе Config() статичным.
Так же оптимизируем классы Program() и Process()
для использования статичной версии класса Config().
После чего добавим загрузку конфига в классе Program().
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 13 мин. [Показать отчёт]
Научился: Java не позволяет делать классы статичными C# не имеет такого ограничения Поля и методы в классе Config сделали статичными Конструктор Config вызывающий метод load загружающий config.txt пробовали удалить Если методы статичные - обращение к ним просто по имени класса Вызов метода load загружающий данные из config.txt  установили в PSVM В варианте со статиками в классе Config загрузка данных всё равно производится, хотя и единожды Статикой стоит увлекаться, если имеем в работе просто набор методов При наличии полей/атрибутов/переменных - статика неуместна Статичные классы не наследуются, методы не переопределяются, ограничений много 
12 Singleton - Config - Using pattern 00:07:54
1 тест
32 чел. ★ 5 Done
  Мы рассмотрели множество рабочих вариантов
реализации, но на деле их эффективность
зависела от конкретной реализации и при
определённых условиях требовалась доработка.
На этом уроке мы наконец реализуем
шаблон проектирования: Синглтон (Singleton).
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 2 час. 28 мин. [Показать отчёт]
Научился: Одиночка - это Приватный конструктор (извне экземпляр объекта не создать) Экземпляр объекта хранится внутри объекта (коробка в коробке) Статичный метод getInstance():Singlton используемый для доступа к единственному экземпляру ====================== -В классе Config.java удалили все статики за ненадобностью -Удалили конструктор, запускающий метод load ---------------------- +Объявили экземпляр класса с названием instance Инициализировали его значением null cо static +Создали приватный конструктор, запускающий метод load +Создали статический метод возвращающий экземпляр объекта getInstance И СОЗДАЮЩИЙ ЕДИНОЖДЫ НОВЫЙ ЭКЗЕМПЛЯР КЛАССА CONFIG ЛИШЬ В СЛУЧАЕ ЕСЛИ ЭКЗЕМПЛЯР КЛАССА CONFIG == NULL В классе Config единственным доступным статическим методом стал Config.getInstance()  
13 Singleton - Config - Cant extend 00:06:23
1 тест
32 чел. ★ 5 Done
  На этом уроке мы вынесем из класса Config() код синглтона
в класс Singleton() и попробуем унаследовать его.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 8 мин. [Показать отчёт]
Научился: попробовали прикрутить к классу Config наследование от Singleton В Синглтоне используются статические методы, а они не наследуются git checkout Config.java - откатили Config.java до крайнего коммита git checkout Process.java - откатили Process.java до крайнего коммита git log - посмотреть историю коммитов 
14 Singleton - Config - Super child 00:05:57
31 чел. ★ 5 Done
  На этом уроке мы всё же разделим
класс Config() на две логические части.
Для этого мы выделим логику Синглона
в отдельный класс ConfigSingleton().
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 27 мин. [Показать отчёт]
Научился: унаследовали класс с Синглтоном от Config, создание Одиночки перенесли туда Обращение к Синглтону подправили в классе Process Загрузка из текстовика оставлена в классе Config, вызов его решен методом super() - вызов метода из суперкласса 
15 Singleton - Timer - Pattern Design 00:08:15
1 тест
31 чел. ★ 5 Done
  На этом уроке мы начинаем создание
класса Секундомер() для засекания времени
работы различных участков программы.
Для разработки этого класса мы воспользуемся
шаблоном проектирования Синглтон.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 33 мин. [Показать отчёт]
Научился: создали новый проект под реализацию секундомера через Одиночку надо: + экземпляр таймера статичный приватный проинициализированный значением null + приватный конструктор с методом, засекающим время старта + статичный публичный метод getInstance создающий единожды экземпляр Таймера(Одиночки) В папке src запустили СКВ Гита git init - стартануть новый пустой репозиторий git add Timer.java - добавить в индекс (начать отслеживать изменения) файл Timer.java git commit -m "some commentarij" - создать новый коммит (слепок состояния кода) 
16 Singleton - Timer - Start / Click 00:05:25
1 тест
30 чел. ★ 5 Done
  На этом уроке мы продолжим создание класса
Timer() при помощи шаблона синглтон.
Для начала мы добавим метод start()
в класс Timer() для запуска секундомера.
Так же мы добавим метод click(),
чтобы увидеть сколько времени прошло.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 0 мин. [Показать отчёт]
Научился: продолжили + метод старта секундомера публичный, ничего не возвращает, ничего не принимает + метод снятия показаний секундомера, ничего не возвращает, принимает на вход строковую переменную text git commit -m == Создание коммита git commit -a -m == закоммитить файлы, которые были изменены и удалены, но новые файлы, о которых вы не сообщили Gitу, не будут затронуты. git log == Просмотр коммитов в репозитории git log --oneline == Просмотр коммитов в репозитории с сокращенным выводом информации 
Сложности: Понять, что здесь git log --oneline надо писать онелине, а не онлине Это к вопросу о внимательности к мелочам и про "я набираю как в видео, а не работает" Было смешно, когда понял, что пропускал литеру "е" 
17 Singleton - Timer - Program 00:09:45
30 чел. ★ 5 Done
  На этом уроке мы наконец добавим основной
класс для нашей программы: Program()
и добавим в метод Program.main() необходимый код
для демонстрации работы синглтона Timer().
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 38 мин. [Показать отчёт]
Научился: Math.sqrt == квадратный корень Math.cbrt == кубический корень Оптимизация Java может опускать исполнение инструкции, если очевидна её неприменимость, поэтому замыкайте тестовые нагрузки какой либо реализацией git add Program.java == добавили новосозданный файл в индекс git commit -a -m "some comment" == отправили в репозиторий (локальный) текущее состояние индекса 
18 Singleton - Timer - String vs Buffer Speed 00:10:58
1 тест
28 чел. ★ 5 Done
  На этом уроке мы сравним скорость работы
между String и StringBuffer.
Для этого мы создадим новый класс StringSpeed()
с методами runString() и runStringBuffer().
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 32 мин. [Показать отчёт]
Научился: создали два метода (со строковой и буфферизированной строковой переменными) принимающие на входе целочисленный аргумент количества повторений На аргументе 168 можно добиться близости к равенству времени обработки (иллюстрация 1), но повторы выполнения дают девиации, и не меняя код можно увидеть знатную волатильность Изменения аргументов в сторону увеличения показали рост эффективности буфферизированной строковой переменной git add новосозданному файлу git commit -a -m "соревнование строки и буфферизированной строки" 
19 Singleton - Timer - Experiment 00:06:05
28 чел. ★ 5 Done
  На этом уроке мы изучим класс Timer()
и выделим часть кода для нового синглтона.
Для этого нам понадобиться новый класс Log()
который будет реализован как синглтон
и заниматься логированием в консоль.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 44 мин. [Показать отчёт]
Научился: создали отдельным классом ведение логов, в классе Одиночкой завели экземпляр log Как и требует букварь, + инициализация статического приватного экземпляра с присвоением значения null + статический публичный метод getInstance возвращающий экземпляр класса : а) новый экземпляр - если null б) уже созданный - если не null git add Log.java git commit -a -m "Add Log" 
20 Singleton - Timer - Log class 00:08:45
1 тест
28 чел. ★ 5 Done
  На этом уроке мы разделим наш синглтон Timer()
на две части: Timer() и SingleTimer().
Тот же эксперимент проведём и с классом Log().
После чего будет ясно, что лучше так не делать
и вернём код в состояние на момента начала урока.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 42 мин. [Показать отчёт]
Научился: создали класс SingleTimer утащили из класса Timer синглтон таймера + инициализацию nullом + getInstance, который у нас getTimer + конструктор экземпляра SingleTimerа, вызывающий родительский конструктор Одиночку целесообразно использовать в основном классе, откатили изменения назад git checkout Log.java git checkout Program.java git checkout StringSpeed.java git checkout Timer.java rm SingleLog.java == удаление файлов не добавленных в индекс rm SingleTimer.java 
Сложности: целесообразно применять Singleton если нужен уникальный доступ к ресурсам и если код не усложняется с дублированием методов или полей 
21 ФИНАЛЬНЫЙ УРОК без видео
7 тестов
13 чел. ★ 5 Done
  Поздpaвляю!
Твoя зaдaча - прoверить cебя и пpойти тест, см. вкладку "Тест".

Напиши отзыв или видеообзор по этому видеокурсу.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 3 мин. [Показать отчёт]
Научился: вся суть Одиночки в том, чтобы экземпляр класса был один и тчк Реализация задумки проста - есть такая баская штука как пустота Эта пустота называется у программистов нАллом (null) При объявлении экземпляра Одиночки, он инициализируется этой самой пустотой А при обращении из программы к Одиночке выполняется проверка на эквивалентность экземпляра пустоте, и если Одиночка ещё равен пустоте, то создаётся первый, он же последний экземпляр Одиночки Если же при обращении к услугам Одиночки, выясняется, что экземпляр уже не равен пустоте(которой он был инициализирован), то методом возвращается тот же самый первый, он же последний экземпляр Singletona Наследовать от Одиночки не получится Если требуется монопольный доступ к Одиночке, для предотвращения одновременного доступа пишите synchronized  в сигнатуру getInstance() Курс знакомит с основами шаблона, при достаточном усердии способен дать толчок для развития, при слабой мотивации позволяет выполнить задания на удовлетворительно и идти дальше Каждый выберет себе степень погружения в тему 
Видеообзор: 31ltOqe288Q
22 VIP - Singleton - Timer - Enum 00:06:31
1 тест
28 чел. ★ 5 Done
  На этом уроке мы реализуем синглтон
с использованием перечислений.
Для этого мы переделаем Log()
из класса (class) в перечисление (enum).
Тоже самое мы проделаем и с классом Timer()
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 47 мин. [Показать отчёт]
Научился: при изменении класса на перечисление, обращение к перечислению происходит не по имени метода, а по имени экземпляра перечисления getLog() уходит в небытие, а вместо него пишем имя как в перечислении писали, в нашем случае LOG Весь код Одиночки стал не нужен, и был заменен одним экземпляром перечисления Если экземпляр перечисления не вызывается в коде, то и запуска конструктора не происходит 
  Итого:   22 видеоурока 2 час. 24 мин.
18 тестов
13 чел. ★ 5  
  Финалисты:   Иван Воронин,   Сергей Соколов,   Станислав,   Povilas Abramovicius,   Sergej Šugajev,   Александр,   Новопашин Владимир,   Tekashnik,   Andrei,   Dmitry Sinitsin,   Yefim,   Anatoli,   Tom .

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





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

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

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

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


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


Научился: Отличный паттерн проектирования) Делал этот курс давно, сейчас просто закрываю дыры) Всем рекоменндую!"
Трудности: Придумать, что было самым сложным