Изучение c# на примерах

Формула программиста
основатель — Волосатов Евгений Витольдович
У вас нет доступа для просмотра этой записи.

Получить доступ

Теория ООП

Практический курс по теории Объектно-ориентированного программирования.
С нуля создаётся проект по рисованию различных геометрических фигур,
которые потом объединяются в спрайты, взаимодействуют друг с другом.

Во время создания проекта постоянно применяется рефакторинг кода,
при этом демонстрируются приёмы Объектно-ориентированного программирования.

Во второй части курса мы проработаем понятие Интерфейса.

Объём: 39 коротких видеоуроков
Время: 7 часов 40 минут.
Доступ на 30 дней.

3000 руб.


Для подписки на пакет необходимо авторизоваться.

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

# Название видеоурока Решило Рейтинг Доступ
1 Инкапсуляция мечты 00:09:02 99 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 15 мин. [Показать отчёт]
Научился: Узнал про понятие инкапсуляция. 
Сложности: Ничего сложного. 
Комментарии: Инкапсуляция (как я понял) - это сокрытие чего-либо, название происходит от слова "капсула". То есть мы не видим внутреннюю реализацию, а можем воздействовать на объект непосредственно через видимый интерфейс. 
2 Урок рисования 00:08:10 95 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Все это уже известно, лишь освежил знания. 
Сложности: Ничего сложного. Немного поштриховал прямоугольник)) Только не знаю, как аналогичное действие сделать с крышей дома( 
Комментарии: Все отлично и понятно.  
3 Первый класс 00:09:53 88 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 15 мин. [Показать отчёт]
Научился: Пока что ничего нового для меня нету. Все ясно и понятно. 
Сложности: Ничего сложного. 
Комментарии: Хороший видеоурок с подробным объяснением каждого шага. Я посмотрел несколько видеоуроков из раздела "Спрайты", так вот там тоже самое делается (создается отдельный класс для линии, передается массив линий и выводится), но еще было использование структуры (в "Спрайтах"). 
4 Второй класс 00:09:13 84 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Пока что ничего нового, но интересно) 
Сложности: Ничего сложного. 
Комментарии: Получается, что мы определили методы Draw с разной сигнатурой (имя метода и список его параметров). Мне кажется, что в конструкторе класса Box при определении ширины и высоты прямоугольника можно было не использовать ключевое слово this (то есть, можно сделать как на видео, а можно и без "this"). Хорошо, что начали, так сказать, с азов, чтобы все было понятно: что, зачем и почему) 
5 Круглый класс 00:08:10 81 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 10 мин. [Показать отчёт]
Научился: Пока все известно. 
Сложности: Ничего сложного. 
Комментарии: Получилась вписанная окружность) Конечно можно и не запоминать, какие пространства имен (using'и) нужны для того или иного метода/свойства или чего-либо, достаточно нажать "Alt+Enter" и C# сама предложит из списка выбрать нужный using (или сама даже подключит) (так, к слову) ))). 
6 Структура пикселя 00:10:55 70 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Пока что ничего нового, но так, с точками, гораздо интереснее получается. 
Сложности: Ничего сложного. Главное правильно вычислить координаты точек. 
Комментарии: Все понятно и хорошо объяснено. Структура - это хорошо) 
7 Структура vs Класс 00:25:05 63 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 35 мин. [Показать отчёт]
Научился: Узнал отличия структуры от класса. Узнал, что DateTime - это структура, а не класс. 
Сложности: Главное, разобраться в материале. Структура копирует значения переменных, а в классе содержатся ссылки на значения переменных. 
Комментарии: Все понятно и подробно разъяснено. Было бы неплохо, познакомиться еще с интерфейсами. Если у Вас, Евгений Витольдович, будем время - запишите, пожалуйста, урок про интерфейсы. 
8 Пиксели для классов 00:14:44 60 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Наследовать конструкторы. 
Сложности: Вроде все ясно. 
Комментарии: Все нормально. 
9 Расстояние между пикселями 00:12:12 60 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Продолжаю исследовать возможности структуры. Для меня новое, что в структуре можно описывать методы и их потов вызывать. Очень полезная вещь на мой взгляд. 
Сложности: Ничего сложного, пока все понятно. 
Комментарии: Все понятно и подробно объяснено. 
10 Цветные карандаши 00:14:54 58 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Интересно уже получается, программа все веселей и веселей. Цветные фигуры смотрятся куда лучше однообразных серых.  
Сложности: Ничего сложного, все понятно. 
Комментарии: Теперь интересно как же можно упростить нашу программу, так как кода становится все больше и больше и разобраться в нем становится все сложнее и сложнее. 
11 Рисуем Снеговика 00:14:40 57 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Рисовать объекты с помощью графических примитивов. 
Сложности: Ничего сложного. 
Комментарии: Оказывается как просто рисовать объекты, когда уже все готово (у нас есть и линия, и окружность, и прямоугольник). Задаем координаты точки и вперед, рисуем, что придумает наше воображение)) p.s. Я пока оставил снеговика, а потом уже создам свой рисунок. 
12 Второй Снеговик 00:09:46 57 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Рисовать цветные графические примитивы) 
Сложности: Ничего сложного. 
Комментарии: 1) Для перемещения снеговика необходимо ввести дополнительную переменную, допустим как мы и сделали (переменная delta), которую мы будем прибавлять к одной из координат каждой точки. На форме можно сделать, к примеру, ползунок для изменения этой delta. 2) Для поворачивания снеговика, как мне кажется, нужно ввести еще одну переменную - третью ось Z и с ней как-то уж работать. 3) Для изменения размера снеговика нужно ввести переменную k - коэффициент растяжения/сжатия, изменяя который мы будем изменять размеры снеговика. То есть домножать на этот коэффициент каждую из координат. На форме, к примеру, можно задавать этот коэффициент, вводя его в текстовое поле. Вот так, на мой взгляд, можно все это реализовать.  
13 Богатое наследство 00:12:53 56 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Познакомился с наследованием. 
Сложности: Ничего вроде сложного нет, главное - понимать, что откуда берется и куда передается. 
Комментарии: Наследование - это перенесение всех свойств (методов, полей и т.п.) родительского класса на дочерний с добавлением чего-то нового в дочерний. К примеру, если у нас есть 2 класса: класс "Человек" и класс "Студент", то базовым (родительским) классом будет являться класс "Человек", а его наследником - класс "Студент", так как студент - это же человек, но у него будет что-то свое ( к примеру, номер зачетной книжки, оценки за сессию). Это все нужно для того, чтобы не было дублирующегося кода. 
14 Фигуральный базовый класс 00:10:56 55 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Пока что ничего нового, но думаю, с следующем уроке будет очень интересно. 
Сложности: Ничего сложного 
Комментарии: Как мне кажется, для того, чтобы выводить снеговика в целом (класс Shape), нужно определить из каких фигур он состоит и в зависимости от этого вызывать ту или иную функцию (для рисования линии, прямоугольника, окружности). Но вот как это реализовать я не знаю( Поэтому с нетерпением перехожу к следующему уроку) 
15 Рисователь снеговиков 00:11:51 55 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Познакомился с методом GetType. Интересно еще то, что для вызова метода рисования нужной фигуры (например, окружности), нужно использовать явное приведение типов. 
Сложности: Ничего сложного 
Комментарии: Оказывается не так сложно было реализовать функцию Draw для рисования фигуры. С методом GetType() я был знаком (знаю, что такой есть), но синтаксис не очень хорошо знаю. Очень часто применяется этот метод (GetType), когда работает с элементами на форме, то есть когда нам нужно выполнить одинаковое действие для всех элементов на форме (панели, picturebox'е или еще где-нибудь). Переменная position, объявленная в классе Shape, понадобится нам для дальнейшей работы. С помощью нее мы сможем перемещать фигуру, изменять ее размеры и поворачивать (изменяя угол поворота). 
16 Переезд метода Draw 00:11:54 55 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Дальнейшему упрощению кода программы. 
Сложности: Ничего сложного 
Комментарии: Очень интересно и увлекательно) 
17 Переезд graph в базовый класс 00:13:10 55 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 25 мин. [Показать отчёт]
Научился: Постигаю мощь наследования. Очень удобная вещь оказывается)) 
Сложности: Ничего сложного, главное - правильно выстроить логику. 
Комментарии: Кода становится все меньше и меньше, разбираться в программе проще. Очень доволен видеоуроком. 
18 Мощь полиморфизма 00:09:01 53 чел. ★ 5 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Полиморфизм это конечно мощь) Узнал про абстрактный класс и использование ключевого слова override для расширения абстрактной реализации унаследованного метода. 
Сложности: Вроде ничего сложного. Все понятно. 
Комментарии: Хотелось бы конечно поподробнее немного узнать об override и virtual. Разница, когда вызывать и т.п. Это пожелание) Хотя обо всем этом можно прочитать в учебнике, так что так даже лучше (мне это стало интересно, пошел прочитал и разобрался) )) 
19 Спрайт для Снеговика 00:12:28 53 чел. ★ 5 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Продолжаю постигать мощь полиморфизма и наследования. 
Сложности: Ничего сложного, кода становится все меньше и меньше и это не может не радовать) 
Комментарии: Все отлично и понятно. 
20 Перемещение круга 00:11:42 53 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Перемещению фигуры - кружка. 
Сложности: Главное - разобраться) Чтобы все правильно работало. 
Комментарии: Как я понял: то есть мы создаем кружок с начальными координатами (в данном случае с координатами 0;0), потом его перемещаем в новые координаты относительно начальных (circle.Move(new Pixel(100,100))) и потом снова идет перемещение кружка в новую позицию вновь от начальных координат (так как они инициализируются в конструкторе при создании кружка), верно? 
21 Перемещение других фигур 00:08:37 53 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Рисовать фигуры с помощью графических примитивов) 
Сложности: Ничего сложного) 
Комментарии: Все отлично и понятно) 
22 Перемещение Снеговиков 00:10:48 52 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Научился перемещать снеговиков) 
Сложности: Ничего сложного, все понятно с перемещением. 
Комментарии: Отличный видеоурок, все понято) 
23 ПОЛУФИНАЛЬНЫЙ УРОК. 46 чел. ★ 5 Done
  Отчёт отправил: 2773. Никита Решено за 15 мин. [Показать отчёт]
Научился: Узнал про основы ООП 
Сложности: Ничего сложного. 
Комментарии: Очень интересный видеокурс. Тем более видеоуроки такой небольшой продолжительности очень легко смотрятся и выполняются, я считаю это очень хорошим плюсом. Мне понравился видеоурок, хотя он не полностью еще завершен, но начало заложено очень хорошее. Потехин Никита.  
24 Интерфейс. Зачем он нужен. 00:09:33 44 чел. ★ 4.9 Done
  Отчёт отправил: 2773. Никита Решено за 10 мин. [Показать отчёт]
Научился: Создавать интерфейсы. 
Сложности: Ничего сложного. 
Комментарии: Я поставил еще перед названием интерфейса букву "I", чтобы было понятно, что это интерфейс. Интерфейс, в моем недалеком понимании, это набор абстрактных членов, то есть в нем будут храниться только названия методов, без тела. 
25 Интерфейс. Правила игры. 00:12:23 43 чел. ★ 5 Done
  Отчёт отправил: 2773. Никита Решено за 15 мин. [Показать отчёт]
Научился: Работать с интерфейсом через классы. 
Сложности: Ничего сложного. 
Комментарии: Метод FindNewLeader(): делаем поиск по всем игрокам и если он Голя, то он лидер. Метод SetNewLeader(): если игрок поймал другого игрока, то он - Голя. Не знаю, насколько верно, увидим в следующем уроке) Действительно, у нас такой классный уровень абстракции (считай все своими именами названо, удобно очень работать) )) 
26 Интерфейс. Алгоритм игры. 00:07:48 43 чел. ★ 5 Done
  Отчёт отправил: 2773. Никита Решено за 15 мин. [Показать отчёт]
Научился: Реализовывать алгоритм игры) 
Сложности: В принципе ничего сложного 
Комментарии: А в методе FindNewLeader() мы добавили в конце цикла foreach оператор break (return), для того, чтобы, к примеру, если лидер поймал игрока5, а у нас в команде 20 игроков, чтобы по всех не проверять, поэтому добавили break? Не знаю, понятно ли расписал вопрос)) 
27 Интерфейс. Создаём кружок. 00:08:36 42 чел. ★ 5 Done
  Отчёт отправил: 2773. Никита Решено за 15 мин. [Показать отчёт]
Научился: Создавать класс "Кружок")) 
Сложности: Ничего сложного 
Комментарии: Дальше, по моему мнению, создать игроков - кружочки. Вывести кружочки на экран и сделать их передвижение (например, по таймеру). p.s. Кто-то (ник proger) писал на вебинаре, что можно убрать private set в свойствах, у меня стоит ReSharper, он не подсказывает, что так можно сделать. Так что думаю, наверное, правильнее оставить (могу ошибаться, я не знаком со свойствами). А вот в классе GameCatch Resharper у списка gamers показывает, что private set убрать можно) Я так и сделал.  
28 Интерфейс. Площадка для игры. 00:11:58 41 чел. ★ 5 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Освежил знания  
Сложности: Ничего сложного. 
Комментарии: Данный класс нужен нам для отображения всех "кружочков" на поле и для очистки поля. То есть, арена демонстрирует нам игроков, которые сейчас играю в игру Голя. Также игроков этих можно шугнуть, громко свистнув (метод Clear()) :) 
29 Интерфейс. Кружок на площадке. 00:11:49 41 чел. ★ 5 Done
  Отчёт отправил: 2773. Никита Решено за 15 мин. [Показать отчёт]
Научился: Довел до ума класс Арена) 
Сложности: Ничего сложного, все просто) 
Комментарии: Все отлично, легко и понятно!) 
30 Интерфейс. Запускаем кружки на площадку! 00:11:49 41 чел. ★ 5 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Рисовать кружки на арене:) 
Сложности: Ничего сложного) 
Комментарии: Все очень круто) Забавно получается) Как пузырьки) Воспользовался советом Максима Базуева и сделал сглаживание (SmoothingMode.AntiAlias). Кружки выглядят покрасивее) 
31 Интерфейс. Кружок хочет играть. 00:09:42 41 чел. ★ 5 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Реализовывать интерфейсы) 
Сложности: Ничего сложного 
Комментарии: Уже с интерфейсами становится понятнее и понятнее) Как я понимаю в методе Беги() нам нужно будет сделать движение кружка по таймеру в хаотичном порядке, причем, если шарик достиг конца поля, то он должен оттолкнуться (развернуться) от него и побежать в другую сторону. Что касается метода Поймал(), то Евгений Витольдович дал очень хорошую подсказку, введя переменные sx и sy - смещение относительно координаты x и y соответственно. Мы будем определять поймал ли Голя игрока или нет по тому, если шарик-голя коснулся (налетел) на шарика-неГолю. Для этого нам и понадобится смещение (к примеру, если расстояние между шариками будет меньше, чем 5 пикселов, то шарик пойман, иначе - нет.). Это мое видение реализации этих методов, а прав ли я или нет, увидим в следующем уроке)  
32 Интерфейс. Кружок готов к игре! 00:20:47 39 чел. ★ 5 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Очень интересно было послушать ответы на вопросы участников вебинара, чтобы получше разобраться) 
Сложности: В принципе все понятно) 
Комментарии: Для запуска игры нам нужен таймер. Как раз при его запуске кружки начнут перемещаться. Далее в этом (timer.Tick) методе (скорее всего так будет) будем вызывать функции, которые писали на этом уроке) 
33 Интерфейс. Кружочки гоняются друг за другом. 00:11:53 39 чел. ★ 5 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Запускать шарики)) 
Сложности: Ничего сложного) Все классно) 
Комментарии: Отличный видеоурок) Ура! Наконец-то кружки "начали играть!") Я думаю, чтобы исправить недочет с переголением, нужно добавить какое-нибудь условие (мол, если ты меня поймал, то дай мне время убежать). 
34 Интерфейс. Изменяем правила игры. 00:10:22 38 чел. ★ 5 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Отредактировали функцию с новым игроком, чтобы исправить недочет с переголением. 
Сложности: Ничего сложного, все понятно) 
Комментарии: На мой взгляд, можно организовать игру прятки. Игрок, который ищет - Голя (лидер). Он должен найти (заголить) других игроков. Можно также добавить условие дополнительное - мало того, что нужно найти игрока, нужно его поймать. И, допустим, кого первого поймали, тот и будет Голей в следующем раунде. По моему, неплохой вариант) 
35 Интерфейс. Создаём новую игру. 00:12:31 37 чел. ★ 5 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Понял, что имея интерфейс, можно написать практически любую игру) 
Сложности: Ничего сложного. Новые правила игры понял. 
Комментарии: В методе SetNewVirus(Игрок) мы будем делать так, если игрок еще не был заражен, а до него коснулись, то он становится переносчиком вируса (Голей). А в методе FindNewVirus() мы будем смотреть, если игрока поймали, то мы его добавляем в список вирусопереносчиков. 
36 Интерфейс. ФИНАЛЬНЫЙ УРОК. 00:13:05 34 чел. ★ 5 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Создавать новые игры, используя интерфейс. 
Сложности: Ничего сложного. 
Комментарии: Мне очень понравилась игра!) Очень классно получилось) И что самое примечательное, что мы можем сами, как нам угодно менять правила игры) 
37 Интерфейс. VIP. Квадратики тоже хотят играть. 00:16:23 35 чел. ★ 5 Done
  Отчёт отправил: 2773. Никита Решено за 20 мин. [Показать отчёт]
Научился: Просто и легко создавать класс Box. 
Сложности: Ничего сложного. 
Комментарии: Попробовал реализовать пересечение прямоугольников и как странно, но все получилось! Спасибо за ссылки, Евгений Витольдович, но в коде действительно имеются ошибки, поэтому сделал по-своему) 
38 Интерфейс. VIP. Пересечение прямоугольников. 00:09:47 33 чел. ★ 5 Done
  Отчёт отправил: 2773. Никита Решено за 10 мин. [Показать отчёт]
Научился: Метод Cross я реализовал в прошлом уроке) 
Сложности: Ничего сложного) 
Комментарии: Все отлично! Шарики и боксики летают) 
39 Интерфейс. VIP. Тяжёлая дружба кругов и квадратов. 00:22:25 26 чел. ★ 5 Done
  Отчёт отправил: 2773. Никита Решено за 30 мин. [Показать отчёт]
Научился: Сумел подружить квадраты и кружки)) 
Сложности: Наверное, эта "дружба" фигур. 
Комментарии: Все очень понравилось! Отличный видеокурс!) Мало того, что более-менее пришло понимание интерфейса, так и еще можно визуально увидеть, что делаешь. Считаю это (наглядность) очень важным моментом) Конечно, количество со временем перейдет в качество! (потихоньку, используя интерфейсы буду все лучше и лучше разбираться что да как!) 
Видеообзор: https://youtu.be/l2N9xKZhPso
  Итого:   39 видеоуроков общей продолжительностью 7 час. 40 мин. 26 чел. ★ 4.95  
  Финалисты:   lomik,   Роман,   Максим Базуев,   Neverwinter 2,   Владимир,   Никита,   Оля,   Валера Луцевич,   Anton Sozykin,   Permitin Alexey,   Артём,   Максим Лапшинов,   Frank,   Archi,   Александр Львович,   Ильшат,   Олег Михайлович,   Дмитрий,   Новопашин Владимир,   Евгений,   Сергей Соколов,   Александр Б.,   Максим Саратов,   Алексей В.,   Александр,   Rita .

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




Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

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

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

Ты в любой момент сможешь отписаться от рассылки.
Научился: Отличный получился курс. Узнал что такое интерфейс, удобная штука. Еще раз закрепил знания полученные в предыдущей части курса. Следующий курс скорее всего Entity Framework
Трудности: все как всегда просто
спасибо за замечательный курс
Научился: Во второй части курса ООП я узнал что такое интерфейс, как он создаётся и для чего он нужен.
Трудности: Сначала мало что было понятно, но к финальному уроку всё встало на свои места.
Курс очень интересный и полезный. Считаю, что этот курс нужно пройти всем начинающим программистам, занимающихся на этом проекте и желательно с него начать.