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

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

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

Теория ООП

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

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

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

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

3000 руб.


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

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

# Название видеоурока Решило Рейтинг Доступ
1 Инкапсуляция мечты 00:09:02 99 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 30 мин. [Показать отчёт]
Научился: Вспомнил, что такое инкапсуляция. Своими словами: инкапсуляция – это создание объекта, внутреннее устройство которого скрыто от пользователей и который доступен пользователю через определенный разработчиком интерфейс. Пользователю доступны лишь определенные свойства и методы объекта. Пользователь может создавать различные экземпляры объекта с указанными им свойствами и методами.  
Сложности: Было несложно.  
Комментарии: Большое спасибо! Замечаний нет.  
2 Урок рисования 00:08:10 95 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 30 мин. [Показать отчёт]
Научился: Научился рисовать фигуры и линии на форме.  
Сложности: Было несложно.  
Комментарии: Большое спасибо! Замечаний нет.  
3 Первый класс 00:09:53 88 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 20 мин. [Показать отчёт]
Научился: Научился создавать класс, писать программу его конструктора и использовать экземпляры класса.  
Сложности: Было несложно.  
Комментарии: Большое спасибо! Замечаний нет.  
4 Второй класс 00:09:13 84 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 20 мин. [Показать отчёт]
Научился: Научился создавать класс для описания прямоугольника, писать программу его конструктора и использовать экземпляры класса.  
Сложности: Было несложно.  
Комментарии: Большое спасибо! Замечаний нет.  
5 Круглый класс 00:08:10 81 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 20 мин. [Показать отчёт]
Научился: Научился создавать класс для описания круга, вписанного в квадрат, писать программу его конструктора и использовать экземпляры класса, рисовать эллипс.  
Сложности: Было несложно.  
Комментарии: Большое спасибо! Замечаний нет.  
6 Структура пикселя 00:10:55 70 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 30 мин. [Показать отчёт]
Научился: Научился создавать структуру для описания точки и изменять ранее созданные классы для использования указанной структуры.  
Сложности: Определение координат точек для рисования фигур.  
Комментарии: Большое спасибо! Замечаний нет.  
7 Структура vs Класс 00:25:05 63 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 2 час. 00 мин. [Показать отчёт]
Научился: Узнал, чем отличается структура от класса и что хранится в памяти и в куче, как открыть и использовать окно Locals. Также узнал, что DateTime – это структура, наследующая интерфейсы.  
Сложности: Запоминается это плохо. Читал про это много раз, затем все снова забывается, потому что это знание почти никогда не используется на практике. Также было трудно понять, почему в структуре не сохраняются изменения.  
Комментарии: Большое спасибо! Замечаний нет.  
8 Пиксели для классов 00:14:44 60 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 1 час. 30 мин. [Показать отчёт]
Научился: Научился работать со структурой Pixel и преобразовывать программу для работы с этой структурой.  
Сложности: Испытывал трудности при описании конcтрyктoров с помощью ключевого слова this ()  
Комментарии: Большое спасибо! Замечаний нет.  
9 Расстояние между пикселями 00:12:12 60 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 30 мин. [Показать отчёт]
Научился: Научился создавать объект Circle по координате центра и любой точке на окружности, а также преобразовывать программу для работы с указанным объектом. Еще раз повторил, чем структура отличается от класса.  
Сложности: По-прежнему испытывал трудности при описании конструкторов с помощью ключевого слова this ()  
Комментарии: Большое спасибо! Замечаний нет.  
10 Цветные карандаши 00:14:54 58 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 1 час. 00 мин. [Показать отчёт]
Научился: Научился создавать объекты различного цвета по технологии ООП, а также преобразовывать программу для работы с указанными объектами.  
Сложности: Нетрудно.  
Комментарии: Большое спасибо! Замечаний нет.  
11 Рисуем Снеговика 00:14:40 57 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 30 мин. [Показать отчёт]
Научился: Научился создавать спрайты, состоящие из нескольких объектов.  
Сложности: Нетрудно.  
Комментарии: Большое спасибо! Замечаний нет.  
12 Второй Снеговик 00:09:46 57 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 30 мин. [Показать отчёт]
Научился: Научился создавать второй спрайт, состоящий из нескольких объектов.  
Сложности: Нетрудно.  
Комментарии: Большое спасибо! Замечаний нет. Чтобы перемещать снеговика, нужно менять переменную delta A = new Pixel(219 + delta1, 63 + delta2); Чтобы поворачивать снеговика, нужно задать центр поворота и каким-то образом определять расстояния от цента до каждой точки. Чтобы изменять размер снеговика, нужно добавить коэффициент A = new Pixel(219 * gamma, 63 * gamma);  
13 Богатое наследство 00:12:53 56 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 30 мин. [Показать отчёт]
Научился: Научился создавать дочерний класс с учетом наследования от родительского класса. Наследование, своими словами, - это возможность использования свойств и методов родительского класса в дочернем классе.  
Сложности: Нетрудно.  
Комментарии: Большое спасибо! Замечаний нет.  
14 Фигуральный базовый класс 00:10:56 55 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 1 час. 00 мин. [Показать отчёт]
Научился: Научился создавать базовый класс для всех фигур.  
Сложности: Написать функцию, которая будет рисовать картинки для базового класса. Долго думал. Получилось так: private void Draw(Shape shape) // функция для рисования фигуры { if (shape.GetType().ToString() == "Geometry.Circle") Draw((Circle)shape); if (shape.GetType().ToString() == "Geometry.Box") Draw((Box)shape); if (shape.GetType().ToString() == "Geometry.Line") Draw((Line)shape); if (shape.GetType().ToString() == "Geometry.ColorCircle") Draw((ColorCircle)shape); if (shape.GetType().ToString() == "Geometry.ColorBox") Draw((ColorBox)shape); if (shape.GetType().ToString() == "Geometry.ColorLine") Draw((ColorLine)shape); }  
Комментарии: Большое спасибо! Замечаний нет.  
15 Рисователь снеговиков 00:11:51 55 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 40 мин. [Показать отчёт]
Научился: Научился работать с экземплярами базового класса и выводить их на экран.  
Сложности: Нетрудно. 
Комментарии: Большое спасибо! Замечаний нет. Переменная Shape.position создается для указания точки центра, от которого рассчитываются параметры группы фигур (спрайта) (думаю, что эта точка будет особенно нужна для моделирования поворота спрайта).  
16 Переезд метода Draw 00:11:54 55 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 40 мин. [Показать отчёт]
Научился: Научился пониманию полиморфизма, также научился совмещать данные и методы в одном классе. Познакомился с вкладкой Class View.  
Сложности: Нетрудно.  
Комментарии: Большое спасибо! Замечаний нет.  
17 Переезд graph в базовый класс 00:13:10 55 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 1 час. 20 мин. [Показать отчёт]
Научился: Научился переносить данные и методы, связанные с объектом, в один класс.  
Сложности: Плохо понятно, почему можно не использовать приведение типов из-за того, что все типы описаны в базовом классе. Также плохо понятно, как теперь настраивается цвет у цветных фигур.  
Комментарии: Не удается передать цвет второму снеговику! Он заменяется на цвет по умолчанию при инициализации фигуры Shape. Подскажите, пожалуйста, в чем моя ошибка?  
18 Мощь полиморфизма 00:09:01 53 чел. ★ 5 Done
  Отчёт отправил: 7645. Александр Львович Решено за 1 час. 00 мин. [Показать отчёт]
Научился: Научился писать метод, реализующий полиморфизм, использовать переопределенные функции с ключевыми словами virtual и override.  
Сложности: Понять виртуальные и абстрактные классы.  
Комментарии: Большое спасибо! Замечаний нет. Очень понравилось, но мозги начинают закипать… :)  
19 Спрайт для Снеговика 00:12:28 53 чел. ★ 5 Done
  Отчёт отправил: 7645. Александр Львович Решено за 1 час. 00 мин. [Показать отчёт]
Научился: Научился создавать новый класс для спрайта.  
Сложности: Плохо понятно, зачем мы все это делаем. Была программа простая и понятная, а сейчас она становится все более запутанной и сложной.  
Комментарии: Большое спасибо! Плохо понятно, зачем мы все это делаем. Была программа простая и понятная, а сейчас она становится все более запутанной и сложной. Кроме того, могут накапливаться мелкие ошибки, которые далее сильно осложнят выполнение курса. Хорошо бы, чтобы ИМЕННО ДЛЯ ДАННОГО КУРСА после прохождения урока открывался эталонный код программы.  
20 Перемещение круга 00:11:42 53 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 40 мин. [Показать отчёт]
Научился: Научился перемещать объект.  
Сложности: Пока все относительно понятно.  
Комментарии: Большое спасибо! Замечаний нет.  
21 Перемещение других фигур 00:08:37 53 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 40 мин. [Показать отчёт]
Научился: Научился перемещать объекты.  
Сложности: Непонятно как определяются относительные координаты крайних точек фигур.  
Комментарии: Большое спасибо! Замечаний нет.  
22 Перемещение Снеговиков 00:10:48 52 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 40 мин. [Показать отчёт]
Научился: Научился перемещать спрайты.  
Сложности: Пока все относительно понятно.  
Комментарии: Большое спасибо! Уже стало видно преимущество объектно-ориентированного подхода. Перемещение второго спрайта производится изменением всего трех операторов.  
23 ПОЛУФИНАЛЬНЫЙ УРОК. 46 чел. ★ 5 Done
  Отчёт отправил: 7645. Александр Львович Решено за 20 мин. [Показать отчёт]
Научился: Писать отзыв  
Сложности: Не очень трудно.  
Комментарии: Большое спасибо. Замечаний нет. Во время изучения курса "Теория ООП" в Школе программиста я узнал много нового об объектно-ориентированном программировании. Вначале мне было не совсем понятно, зачем нужно было "городить" такие сложности (большое количество классов, в каждом классе свои (часто одноименные и переопределенные) методы, многочисленные наследования и т.д.). Однако на последнем занятии мне уже стало видно преимущество объектно-ориентированного подхода. Перемещение спрайта производится теперь изменением всего нескольких операторов. Надеюсь, что впереди меня ждут новые открытия. Большое спасибо Евгению Витольдовичу за этот интересный и познавательный курс. Мое имя и фотография имеются в моем профиле на портале Школы. Также необходимо отметить следующее: Особенностью этого курса является использование одного и того же кода и его постепенное изменение. Поэтому в процессе прохождения курса могут накапливаться мелкие ошибки, которые далее могут сильно осложнить работу с программой. В целях дальнейшего развития данного курса предлагаю чтобы ИМЕННО ДЛЯ ДАННОГО КУРСА после прохождения урока открывался эталонный код программы для сверки базового кода для следующих занятий. Александр Львович  
24 Интерфейс. Зачем он нужен. 00:09:33 44 чел. ★ 4.9 Done
  Отчёт отправил: 7645. Александр Львович Решено за 30 мин. [Показать отчёт]
Научился: Познакомился с понятием "интерфейс". Интерфейс – это программное средство, обеспечивающее взаимодействие между различными элементами и объектами системы. Например, интерфейс может обеспечивать взаимодействие между отдельными классами в программе или между человеком и программой. Еще бывают интерфейсы для взаимодействия различных элементов компьютера. Например, сокет (разъём) – это тоже вид интерфейса.  
Сложности: Пока все понятно.  
Комментарии: Большое спасибо! Замечаний нет  
25 Интерфейс. Правила игры. 00:12:23 43 чел. ★ 5 Done
  Отчёт отправил: 7645. Александр Львович Решено за 40 мин. [Показать отчёт]
Научился: Научился создавать класс с разработанными предварительно полями и методами. Самостоятельно методы FindNewLeader() и SetNewLeader() пока не напишу. Первый метод, вероятно, должен проверять все объекты. Если какой-то объект пойман (Поймал(gamer) == true), то этот объект становится голей (SetNewLeader(gamer)). Метод SetNewLeader() освобождает прежнего голю и назначает нового.  
Сложности: Пока все относительно понятно.  
Комментарии: Большое спасибо! Замечаний нет  
26 Интерфейс. Алгоритм игры. 00:07:48 43 чел. ★ 5 Done
  Отчёт отправил: 7645. Александр Львович Решено за 30 мин. [Показать отчёт]
Научился: Научился создавать методы для преобразования объектов. Чтoбы нaчaть игру, нужно создать несколько экземпляров игроков и назначить голю.  
Сложности: Пока все относительно понятно.  
Комментарии: Большое спасибо! Замечаний нет  
27 Интерфейс. Создаём кружок. 00:08:36 42 чел. ★ 5 Done
  Отчёт отправил: 7645. Александр Львович Решено за 30 мин. [Показать отчёт]
Научился: Научился создавать класс объекта. Дальше нужно создать несколько экземпляров игроков и назначить голю.  
Сложности: Пока все относительно понятно.  
Комментарии: Большое спасибо! Замечаний нет  
28 Интерфейс. Площадка для игры. 00:11:58 41 чел. ★ 5 Done
  Отчёт отправил: 7645. Александр Львович Решено за 40 мин. [Показать отчёт]
Научился: Научился создавать площадку для игры. Класс Arena нужен для формирования площадки.  
Сложности: Есть трудности в понимании операторов конструктора класса Arena.  
Комментарии: Большое спасибо! Замечаний нет  
29 Интерфейс. Кружок на площадке. 00:11:49 41 чел. ★ 5 Done
  Отчёт отправил: 7645. Александр Львович Решено за 30 мин. [Показать отчёт]
Научился: Научился создавать методы Show, Refresh и NewCircle класса Arena.  
Сложности: Пока все понятно. 
Комментарии: Большое спасибо! Замечаний нет  
30 Интерфейс. Запускаем кружки на площадку! 00:11:49 41 чел. ★ 5 Done
  Отчёт отправил: 7645. Александр Львович Решено за 30 мин. [Показать отчёт]
Научился: Научился создавать запускать экземпляры объектов.  
Сложности: Пока все понятно.  
Комментарии: Большое спасибо! Замечаний нет  
31 Интерфейс. Кружок хочет играть. 00:09:42 41 чел. ★ 5 Done
  Отчёт отправил: 7645. Александр Львович Решено за 40 мин. [Показать отчёт]
Научился: Научился использовать наследование интерфейса и создавать методы, унаследованные у интерфейса. Метод Беги() может использовать случайное смещение объекта (кружка) по осям X и Y. Метод Поймал(obj) сравнивает координаты Голи и остальных объектов. Если Голя и какой-нибудь другой объект пересекаются, то метод Поймал(obj) возвращает значение true (в противном случае – false).  
Сложности: Пока все понятно.  
Комментарии: Большое спасибо! Замечаний нет  
32 Интерфейс. Кружок готов к игре! 00:20:47 40 чел. ★ 5 Done
  Отчёт отправил: 7645. Александр Львович Решено за 1 час. 00 мин. [Показать отчёт]
Научился: Научился писать методы Беги() и Поймал(obj). Для запуска игры нужно задать изменения координат (сейчас они у нас равны 0).  
Сложности: Не совсем понятен параметр this в методе Поймал(obj).  
Комментарии: Большое спасибо! Замечаний нет  
33 Интерфейс. Кружочки гоняются друг за другом. 00:11:53 39 чел. ★ 5 Done
  Отчёт отправил: 7645. Александр Львович Решено за 1 час. 00 мин. [Показать отчёт]
Научился: Научился воспроизводить движение объектов по таймеру.  
Сложности: Не очень понятен механизм перерисовки объектов в таймере.  
Комментарии: Большое спасибо! Уже заработало! Можно насладиться результатом. Недoчeт c переголением, мне кажется, можно исправить, используя задержку.  
34 Интерфейс. Изменяем правила игры. 00:10:22 38 чел. ★ 5 Done
  Отчёт отправил: 7645. Александр Львович Решено за 30 мин. [Показать отчёт]
Научился: Научился реализовывать задержку объекта.  
Сложности: Пока все понятно.  
Комментарии: Большое спасибо! Замечаний нет Новая игра - добавить управление лидирующим шариком, чтобы он избегал столкновения. 
35 Интерфейс. Создаём новую игру. 00:12:31 37 чел. ★ 5 Done
  Отчёт отправил: 7645. Александр Львович Решено за 40 мин. [Показать отчёт]
Научился: Научился изменять правила жизнедеятельности объекта и писать новые методы для реализации этих правил. SetNewVirus(Игрoк) – нового игрока добавляем в список virused. FindNewVirus() – проверяем всех игроков на вступление в контакт с "зараженным" игроком.  
Сложности: Пока все понятно.  
Комментарии: Большое спасибо! Замечаний нет  
36 Интерфейс. ФИНАЛЬНЫЙ УРОК. 00:13:05 34 чел. ★ 5 Done
  Отчёт отправил: 7645. Александр Львович Решено за 50 мин. [Показать отчёт]
Научился: Научился писать методы SetNewVirus(Игрoк) и FindNewVirus() и запускать игру по новым правилам. 
Сложности: Пока все было понятно. 
Комментарии: Большое спасибо! Отзыв: Курс «Теория объектно-ориентированного программирования на практике» в Школе программиста представлял для меня большой интерес. Курс состоит из двух основных частей. В первой части данного курса был очень подробно рассмотрен процесс создания и изменения объектов без использования и с использованием ООП. Преобразование проекта первого типа во второй было весьма непростым, но в результате преобразования работа с различными объектами данного типа (их создание и изменение) значительно облегчилась. Во второй части была не менее подробно рассмотрена работа с интерфейсом и было показано, как можно использовать объект типа Интерфейс для практической реализации объектно-ориентированного подхода. Как всегда, особая благодарность руководителю проекта Школа программирования Евгению Витольдовичу Волосатову, который подобрал такие интересные задачи и все подробно объясняет. Некоторые сложные для меня вопросы программирования также приходится изучать дополнительно – с помощью интернета и специальной литературы. Мое имя и фотография имеются в моем профиле на портале Школы. В целях дальнейшего развития данного курса предлагаю показать, как можно было бы написать программу работы со снеговиками с нуля, сразу с использованием ООП.  
37 Интерфейс. VIP. Квадратики тоже хотят играть. 00:16:23 35 чел. ★ 5 Done
  Отчёт отправил: 7645. Александр Львович Решено за 35 мин. [Показать отчёт]
Научился: Научился применять правила жизнедеятельности объекта для объектов другого типа (прямоугольников).  
Сложности: Пока все понятно.  
Комментарии: Большое спасибо! Простота применения правил для объектов другого типа впечатляет!  
38 Интерфейс. VIP. Пересечение прямоугольников. 00:09:47 33 чел. ★ 5 Done
  Отчёт отправил: 7645. Александр Львович Решено за 30 мин. [Показать отчёт]
Научился: Научился проверять пересечение объектов другого типа (прямоугольников).  
Сложности: Не понял смысл выражения Cross(this.box, ((Box)that).box). Не понял, что есть this, а что есть that.  
Комментарии: Большое спасибо! Замечаний нет  
39 Интерфейс. VIP. Тяжёлая дружба кругов и квадратов. 00:22:25 26 чел. ★ 5 Done
  Отчёт отправил: 7645. Александр Львович Решено за 1 час. 20 мин. [Показать отчёт]
Научился: Научился писать отдельный модуль для сравнения объектов двух типов. Понял, что очень тяжело программировать сравнение объектов разных типов.  
Сложности: Пока все понятно.  
Комментарии: Большое спасибо! Все прекрасно работает!  
Видеообзор: https://youtu.be/tiZQKFwkUEs
  Итого:   39 видеоуроков общей продолжительностью 7 час. 40 мин. 26 чел. ★ 4.95  
  Финалисты:   lomik,   Роман,   Максим Базуев,   Neverwinter 2,   Владимир,   Никита,   Оля,   Валера Луцевич,   Anton Sozykin,   Permitin Alexey,   Артём,   Максим Лапшинов,   Frank,   Archi,   Александр Львович,   Ильшат,   Олег Михайлович,   Дмитрий,   Новопашин Владимир,   Евгений,   Сергей Соколов,   Александр Б.,   Максим Саратов,   Алексей В.,   Александр,   Rita .

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




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

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

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

Ты в любой момент сможешь отписаться от рассылки.
Научился: Научился писать методы SetNewVirus(Игрoк) и FindNewVirus() и запускать игру по новым правилам.
Трудности: Пока все было понятно.
Большое спасибо! Отзыв: Курс «Теория объектно-ориентированного программирования на практике» в Школе программиста представлял для меня большой интерес. Курс состоит из двух основных частей. В первой части данного курса был очень подробно рассмотрен процесс создания и изменения объектов без использования и с использованием ООП. Преобразование проекта первого типа во второй было весьма непростым, но в результате преобразования работа с различными объектами данного типа (их создание и изменение) значительно облегчилась. Во второй части была не менее подробно рассмотрена работа с интерфейсом и было показано, как можно использовать объект типа Интерфейс для практической реализации объектно-ориентированного подхода. Как всегда, особая благодарность руководителю проекта Школа программирования Евгению Витольдовичу Волосатову, который подобрал такие интересные задачи и все подробно объясняет. Некоторые сложные для меня вопросы программирования также приходится изучать дополнительно – с помощью интернета и специальной литературы. Мое имя и фотография имеются в моем профиле на портале Школы. В целях дальнейшего развития данного курса предлагаю показать, как можно было бы написать программу работы со снеговиками с нуля, сразу с использованием ООП.
Научился: Создавать новые игры, используя интерфейс.
Трудности: Ничего сложного.
Мне очень понравилась игра!) Очень классно получилось) И что самое примечательное, что мы можем сами, как нам угодно менять правила игры)