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

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

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

Теория ООП

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

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

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

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

3000 руб.


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

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

# Название видеоурока Решило Рейтинг Доступ
1 Инкапсуляция мечты 00:09:02 100 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 30 мин. [Показать отчёт]
Научился: Всё умел. 
Сложности: Ничего. 
Комментарии: Скриншот создан вручную, подход творческий ))) Согласен с Владимиром (6696), надо четко выделить главное в таких фундаментальных вопросах. 
2 Урок рисования 00:08:10 96 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 30 мин. [Показать отчёт]
Научился: Познакомился с базовыми основами рисования. 
Сложности: Понять всё это. 
Комментарии: Мы создали picture, чтобы рисовать на ней, но затем еще создали bmp, чтобы рисовать на нем, для рисования у нас graph, но рисуем мы pen... Жесть! Как в банке, чтобы получить кредит, куууча промежуточных звеньев непонятного назначения. Неужели нельзя создать picture, а затем заюзать pen... 
3 Первый класс 00:09:53 89 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 30 мин. [Показать отчёт]
Научился: Познакомился с передачей аргументов объекту 
Сложности: Ответить на этот вопрос. 
Комментарии: Даже не знаю что и сказать. Правда. Наверно уроки следует слушать параллельно с чтением книги. 
4 Второй класс 00:09:13 85 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 30 мин. [Показать отчёт]
Научился: Познакомился с понятием наследование. 
Сложности: Понять всё это. 
Комментарии: Пока вроде неплохо, продолжаем. 
5 Круглый класс 00:08:10 82 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 30 мин. [Показать отчёт]
Научился: Узнал особенности рисования окружности. 
Сложности: Ну хоть где то я могу написать: ничего)) 
Комментарии: В моей реализации это похоже на ... конуру))) 
6 Структура пикселя 00:10:55 71 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 30 мин. [Показать отчёт]
Научился: Познакомился с кусочком ООП: использование универсальных данных - обозначили один раз, вызвали много раз по разному. 
Сложности: Понять, как всё это работает. Да!! 
Комментарии: Вот это обалденный урок! Я прям почувствовал, как начинаю достигать просветления. box1 = new Box(150, 220, 230, 180); заменили на box1 = new Box(C, B); - круто!! Кусочек мощи объектно-ориентированного подхода в "переводе на пощупать". Кстати вопрос: а что такое конструктор? Определение: штука которая создает экземпляр класса - теперь не прокатывает. Как говорит книга : класс - это чертеж, а объект - это готовый экземпляр... Но с одного чертежа нельзя заготовить два разных объекта. 
7 Структура vs Класс 00:25:05 64 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 45 мин. [Показать отчёт]
Научился: Познакомился с ключевыми словами ref, out. Узнал интересные особенности структур. 
Сложности: Всё здорово объяснили, спасибо, количество понимаемого увеличилось! 
Комментарии: Были понятны пункты 1(из за пояснения в нем же), 4(немного), 6.. и всё. Структуре можно делать конструктор... АХТУНГ!!! Не может быть! (это еще надо было на прошлом уроке написать...) Евгений Витольдович... а что такое виртуальные члены? Хочется спросить, что такое наследование интерфейсов, но я не буду... от греха... голова всё же целая нужна :-)) 
8 Пиксели для классов 00:14:44 61 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 45 мин. [Показать отчёт]
Научился: Познакомился с особенностями использования ключевого слова this в заголовке конструктора. 
Сложности: Понять, как всё это работает. Раньше мы передавали координаты, а теперь передаём структуру.  
Комментарии: Код становится более компактным, хотя и болеевысокоабстрактным. 
9 Расстояние между пикселями 00:12:12 61 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 45 мин. [Показать отчёт]
Научился: Углубил познания о ключевом слове this. 
Сложности: "...идея инкапсуляции в том что, можно предоставлять различные способы вызова объекта..." На этом месте мозг чуть чуть загрустил. Слегонца. а когда появилось вот ЭТО : this (center, center.distance (point)) , то тут мозг загрустил посильнее..... И только лишь четырёхминутная "медитация" по этому вопросу помогла понять, почему убрали вообще всё. 
Комментарии: 1) double radius = Math.Sqrt( в конструкторе public Circle класса Circle. Почему нельзя float? внутри где то double есть? Такое ощущение, что в Math.Sqrt где то в описании дабл забит, но явно это не сказано... 2) при вызове Draw надо было изменить circle1 на circle. Но где то... то ли не сказали, то ли я пропустил. Хорошо хоть быстро до этого догадался... Самое жуткое, когда на вебинаре рисуется 2 окружности, а у тебя ОДНА.... ужааааас.... (потому что будешь искаааать, искааааааать, искааааааааааааааааааааааать...) 3) И раз уж мы возвращались к разнице класса и структуры.... Что такое виртуальные члены? 
10 Цветные карандаши 00:14:54 59 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 1 час. 00 мин. [Показать отчёт]
Научился: Делать запутанные программы. 
Сложности: Подобрать цвет. Бывает он рисуется, а не видно. И думаешь, что не рисуется... Honeydew к примеру. 
Комментарии: Неожиданное продолжение. Я думал мы напишем типа суперкласс, при помощи которого будем управлять цветами. 
11 Рисуем Снеговика 00:14:40 58 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 45 мин. [Показать отчёт]
Научился: Познакомился с рисованием "с нуля". 
Сложности: Самым сложным было неподдаться соблазну нарисовать что нибудь супер-пупер-какоенибдуь, и продолжить заниматься)))) 
Комментарии: Может есть более "четкий" способ рисования "с нуля"... я не знаю, надо будет как нибудь загуглить. 
12 Второй Снеговик 00:09:46 57 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 45 мин. [Показать отчёт]
Научился: Всё уже знал 
Сложности: Ничего. 
Комментарии: Вы по сути ответили на вопрос, который задали. Действительно - вся фигура должна обсчитываться относительно одной точки. То есть функция рисования фигуры будет принимать 4 значения (точка отсчета, первая точка, вторая точка, цвет). Точка отсчета - это для всех фигур одного снеговика одинакова. первая и вторая точки это для квадрата углы к примеру. ну цвет - это цвет. Надо сдвинуть - сдвигаем одну точку - точку отсчета. Если хочется поворачивать - придется считать синусы. То есть у нас есть вектор с координатами. По известным координатам можно его "дополнить до треугольника", вычислить синус угла, вычислить синус необходимого угла, из него выразить координаты... Ну вобщем можно если заморочиться.. На счет поворачивать - не знаю как. У нас объект 2D, такие обычно не поворачивают. 
13 Богатое наследство 00:12:53 56 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 20 мин. [Показать отчёт]
Научился: Познакомился с наследованием 
Сложности: Пока ничего. 
Комментарии: Непонятно про базовый конструктор без параметров. Надеюсь дальше рассмотрим. 
14 Фигуральный базовый класс 00:10:56 55 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 30 мин. [Показать отчёт]
Научился: Всё знал. 
Сложности: Ничего. 
Комментарии: Реализовать функцию Draw элементарно - достаточно взять (каким-то хитрым образом) из массива информацию о том, какая конкретно фигура рисуется. Ну и добавить в Shape тип фигуры, чтобы с этим работать. Вот и всё - всего - то :-)))))) 
15 Рисователь снеговиков 00:11:51 55 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 1 час. 00 мин. [Показать отчёт]
Научился: Углубил знания о наследовании. 
Сложности: ВСЁ!!! Всё было сложным! Понять как всё это работает!!!  
Комментарии: Это кошмар какой-то! Я даже не знаю, как это назвать. Мы организовываем класс Shape от которого наследуем всё, при этом в классе ничего нет. То есть сёркл, лайн и бокс это фигуры, а шэйп - это как бы профигура (по аналогии с прокариотами), никакая фигура. И затем мы делаем массив никаких фигур! snowman1 = new Shape[7]; Далее мы рисуем снеговика Draw(snowman1); С одной стороны всё хорошо, Рисуем (снеговик). все четко и понятно. НО с другой стороны мне надо держать в голове, что сноумэн1 это массив, и что будет вызвана функция Draw(Shape[] shapes) . Ага. А shapes[j] - это уже какой то элемент массива, и уже с ним будет вызвана другая функция, то есть строка Draw(shapes[j]); вызовет Draw(Shape shape). которая в свою очередь будет вызывать функции для рисования отдельных фигур. Я на это долго смотрел. Дооолго смотрел. ..... ..... .... Нет, ну вот честно. Массив никаких фигур, а затем мы вызываем функцию, которая отрисовывает поэлементно, по дороге определяя тип... А-а-а-а.... Ощущение, что в черепную коробку засунули гантелю, и она [коробка] стала очень тяжёлой... 
16 Переезд метода Draw 00:11:54 55 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 20 мин. [Показать отчёт]
Научился: Познакомился с понятием полиморфизм. 
Сложности: Самым сложным остаётся понять, как инициализируется графика... 
Комментарии: Продолжаем идти к самому страшному. 
17 Переезд graph в базовый класс 00:13:10 55 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 30 мин. [Показать отчёт]
Научился: Еще немного познакомился с наследованием. 
Сложности: Сейчас всё боле-менее понятно. Я имею ввиду именно то, что мы сделали. Только всё становится более сложным, более высокоабстрактным.  
Комментарии: Уже сложнее воспринимать фигуру как фигуру. Где то она объявляется, где - то инициализируется, откуда-то берет информацию, например о цвете.... Я не показываю на скриншотах каждый раз одних и тех же снеговиков. Ну нет в этом смысла. Код меняется. 
18 Мощь полиморфизма 00:09:01 53 чел. ★ 5 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 1 час. 00 мин. [Показать отчёт]
Научился: Еще немного познакомился с полиморфизмом. 
Сложности: Никаких трудностей нет, потому что ничего не понял))) 
Комментарии: Ну ладно, оверрайд это непонятно (ну как бы поняяяятно но не освоено, не могу сказать, в каком случае оно будет работать, а в каком - нет) Но вот какой интересный вопрос у меня возник... Да, допустим, базовый класс шэйп - абстрактный (по другому класс никакой фигуры и не назовешь). И функция дроу в других классах оверрайд и определяет себя по типу фигуры... Но класс форм то от него [шэйпа] не наследуется. Как же функция дроу в форм1 узнает, что в шейпе дроу абстрактна? Это главный вопрос к уроку, а так все норм. Наверное... 
19 Спрайт для Снеговика 00:12:28 53 чел. ★ 5 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 20 мин. [Показать отчёт]
Научился: Познакомился с еще одним способом использования List 
Сложности: Да вроде всё хорошо. 
Комментарии: Комментарий абстрактен. 
20 Перемещение круга 00:11:42 53 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 30 мин. [Показать отчёт]
Научился: Научился простейшему движению фигуры. 
Сложности: Понять отличие координат. 
Комментарии: Вроде бы всё хорошо. Чует моё сердце, поворачивать и изменять размер мы уже не будем. ( 
21 Перемещение других фигур 00:08:37 53 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 15 мин. [Показать отчёт]
Научился: Перемещать несколько фигур. 
Сложности: Всё просто. 
Комментарии: Нетерпится узнать, как перемещать спрайт. 
22 Перемещение Снеговиков 00:10:48 52 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 20 мин. [Показать отчёт]
Научился: Познакомился с перемещением спрайта 
Сложности: На базе понятого предыдущего всё текущее понятно. 
Комментарии: Очень надеюсь, что мы продолжим, тем более что видео обещает это) 
23 ПОЛУФИНАЛЬНЫЙ УРОК. 46 чел. ★ 5 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 45 мин. [Показать отчёт]
Научился: Продолжил тренироваться делать видео-отчеты. 
Сложности: Записать нормально, без слов паразитов, без тупого гундения обо всём на свете. (конеееечно, не факт, что я всё убрал, но поверьте, это 3й вариант, и он гораздо лучше чем первый) 
Комментарии: SHOW MUST GO ON!!! 
Видеообзор: http://www.youtube.com/watch?v=uhhTl9-u4iM
24 Интерфейс. Зачем он нужен. 00:09:33 44 чел. ★ 4.9 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 20 мин. [Показать отчёт]
Научился: Познакомился с понятием интерфейс на английском языке. 
Сложности: Ничего. 
Комментарии: Интерфейс это "междумордие". 
25 Интерфейс. Правила игры. 00:12:23 43 чел. ★ 5 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 30 мин. [Показать отчёт]
Научился: Добавлению заглушек на непрописанные методы. 
Сложности: Ничего. 
Комментарии: Даже не знаю, что тут прокомментировать... На вебинаре всё это тяжелее воспринимать... Вечером (а тем более ночью!!)). Щас вроде как даже по лучше идет. 
26 Интерфейс. Алгоритм игры. 00:07:48 43 чел. ★ 5 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 30 мин. [Показать отчёт]
Научился: Вспомнил, в каком случае пишется return. 
Сложности: Ничего. 
Комментарии: Чтобы играть в игру надо кучу всего еще сделать. Арену. Реализовать функции на русском которые... вобщем много. 
27 Интерфейс. Создаём кружок. 00:08:36 42 чел. ★ 5 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 15 мин. [Показать отчёт]
Научился: Продолжаю повторять изученное. 
Сложности: Ничего. 
Комментарии: void - это тип данных, множество значений которого пусто. Что такое "геттер" ? ( который в замен {get; private set;} ) 
28 Интерфейс. Площадка для игры. 00:11:58 41 чел. ★ 5 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 20 мин. [Показать отчёт]
Научился: Узнал некоторые тонкости использования слова this. 
Сложности: this.picture.Image - добавление this сюда было самым сложным. (точнее говоря, понимание этого ) 
Комментарии: Арена - класс для управления нашим полем (размеры и обновление). 
29 Интерфейс. Кружок на площадке. 00:11:49 41 чел. ★ 5 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 20 мин. [Показать отчёт]
Научился: Мы продолжаем. 
Сложности: Ничего. 
Комментарии: Если бы у меня не было волшебной программки, фиг бы я сделал второй скрин. 
30 Интерфейс. Запускаем кружки на площадку! 00:11:49 41 чел. ★ 5 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 30 мин. [Показать отчёт]
Научился: Отображать кружки на экране. 
Сложности: Все хорошо. 
Комментарии: Интересный рандом... некоторые зоны по несколько кружков друг в друге, а некоторые (в центре парочка) совсем пустые... 
31 Интерфейс. Кружок хочет играть. 00:09:42 41 чел. ★ 5 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 15 мин. [Показать отчёт]
Научился: Продолжаю знакомиться с интерфейсом. 
Сложности: Ничего. 
Комментарии: Чтобы сделать функцию беги, надо менять координаты центра. А для этого добавить таймер, функцию шаг.. ну вобщем много чего)) 
32 Интерфейс. Кружок готов к игре! 00:20:47 40 чел. ★ 5 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 30 мин. [Показать отчёт]
Научился: Познакомился с тонкостями использования слова this. 
Сложности: Понять ЭТО: return Cross(this, (Circle)obj); 
Комментарии: Всего то оказалось что слово this голяком указывает на текущий кружок. На текущий экземпляр объекта точнее. Но тогда ночью это с большим трудом доходило. 
33 Интерфейс. Кружочки гоняются друг за другом. 00:11:53 40 чел. ★ 5 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 30 мин. [Показать отчёт]
Научился: Запускать шарики!!! 
Сложности: Узнать, почему за экран вылетают. Дело в функции Беги() класса Circle. 
Комментарии: Переголение можно убрать, добавив задержку после загаливания. Например так. 
34 Интерфейс. Изменяем правила игры. 00:10:22 39 чел. ★ 5 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 20 мин. [Показать отчёт]
Научился: Останавливать лидера. 
Сложности: Пока всё хорошо. Сейчас они уже не дёргаются так рандомно, как на вебинаре))) Точнее сказать, как тогда ночью! 
Комментарии: На счет новой игры... Как мы и предлагали на вебинаре... зомби мооод!!!! (надеюсь Оля знает правила) ))) переменную MaxSkipSteps сделал равной 20. Сделал так, чтобы шарики меньшего размера двигались быстрее. 
35 Интерфейс. Создаём новую игру. 00:12:31 38 чел. ★ 5 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 15 мин. [Показать отчёт]
Научился: Не стоит наследовать то что наследовать не стоит. 
Сложности: Мы продолжаем. 
Комментарии: На счет SetNewVirus(Игрок) и FindNewVirus() чет даже нет никаких идей. Ну может устал просто, 4й урок подрят))) Пойду положу карбонат. 
36 Интерфейс. ФИНАЛЬНЫЙ УРОК. 00:13:05 35 чел. ★ 5 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 1 час. 15 мин. [Показать отчёт]
Научился: На примерах новых игр удалось глубже понять, что такое интерфейс. Теперь есть база для расширения своих познаний. 
Сложности: Вообще я тут стал смотреть смотреть смотреть на код код код... И вижу что я не всё понимаю. Например gamers.Add(gamer); - команда добавляет нового игрока... А какого? Как это узнать? Что изначально в переменной gamer? причем эта переменная типа "Игрок" то есть типа интерфейс. Я так подозреваю, что я не знаю какое-то универсальное свойство списка. Но если это не так, поправьте меня, то есть если где то в программе мы это оговариваем особо. 
Комментарии: Скриншотов программы не будет, потому что есть видео. 
Видеообзор: https://youtu.be/mXdsRztfQK8
37 Интерфейс. VIP. Квадратики тоже хотят играть. 00:16:23 36 чел. ★ 5 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 30 мин. [Показать отчёт]
Научился: Добавлять новый класс с интерфейсом. 
Сложности: Найти ошибку в строке foreach (Box obj in game.gamers) arena.Show(box); 
Комментарии: Как то странно конструкторы сделаны. Нафига так? public Box(int sx, int sy) : this(x, y, w, h) { this.sx = sx; this.sy = sy; } public Box(int x, int y, int w, int h, int sx, int sy) { box = new Rectangle(x, y, w, h); color = Color.Green; } По моему логичнее было бы public Box(int sx, int sy) : this(x, y, w, h) { this.sx = sx; this.sy = sy; } public Box(int x, int y, int w, int h) { box = new Rectangle(x, y, w, h); color = Color.Green; } 
38 Интерфейс. VIP. Пересечение прямоугольников. 00:09:47 33 чел. ★ 5 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 20 мин. [Показать отчёт]
Научился: Добавлять квадратикам способность поймать друг друга. 
Сложности: ((Box)that).box - вот это было самым сложным. 
Комментарии: (Box)that.box - почему так не работает? ((((( Вообще сейчас легче делать чем на вебинаре. Реально легче, всё с первого раза заработало. Никаких нервов.  
39 Интерфейс. VIP. Тяжёлая дружба кругов и квадратов. 00:22:25 27 чел. ★ 5 Done
  Отчёт отправил: 1901. Neverwinter 2 Решено за 1 час. 30 мин. [Показать отчёт]
Научился: Научился зомби-коду на примере сравнения слонов с конфетами!!! (пересечения кружочков и квадратиков) 
Сложности: Всё!!! 
Комментарии: Crosser crosser = new Crosser(); - что же получается? crosser - это экземпляр класса Crosser, но не объект? ( В нем ведь полей нет, одни методы - иными словами "он не существительное" ) На всякий случай прикладываю архив проекта, вдруг кому нужно. Будет храниться 30 дней ( начиная с 14.11.2015) 
Видеообзор: https://youtu.be/t2O6iCL7prM
  Итого:   39 видеоуроков общей продолжительностью 7 час. 40 мин. 27 чел. ★ 4.95  
  Финалисты:   lomik,   Роман,   Максим Базуев,   Neverwinter 2,   Владимир,   Никита,   Оля,   Валера Луцевич,   Anton Sozykin,   Permitin Alexey,   Артём,   Максим Лапшинов,   Frank,   Archi,   Александр Львович,   Ильшат,   Олег Михайлович,   Дмитрий,   Новопашин Владимир,   Евгений,   Сергей Соколов,   Александр Б.,   Максим Саратов,   Алексей В.,   Александр,   Rita,   Станислав .

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




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

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

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

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