Теория ООП на практике C#
4.5 (12 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
67 students enrolled

Теория ООП на практике C#

Демонстрация преимуществ Объектно-Ориентированного подхода на примере рефакторинга программы
4.5 (12 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
67 students enrolled
Last updated 7/2018
Russian
Current price: $25.99 Original price: $39.99 Discount: 35% off
1 day left at this price!
30-Day Money-Back Guarantee
This course includes
  • 7.5 hours on-demand video
  • 1 downloadable resource
  • Full lifetime access
  • Access on mobile and TV
  • Certificate of Completion
Training 5 or more people?

Get your team access to 4,000+ top Udemy courses anytime, anywhere.

Try Udemy for Business
What you'll learn
  • Рефакторить код проекта.
  • Инкапсулировать объекты, использовать наследование и полиморфизм.
  • Создавать простую анимационную игру.
Course content
Expand all 38 lectures 07:40:17
+ Вступление
2 lectures 17:10

Курс по теории объектно-ориентированного программирования (ООП).

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

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

* Суть курса достаточно полно описана в отчёте Ларисы, который был составлен ею по завершению данного курса. Выдержку из данного отчета можно увидеть в прикреплённом файле.

Самостоятельное задание:

  1. Написать своими словами, что такое «Инкапсуляция».

  2. Прикрепить любую картинку на тему Инкапсуляции.

  3. Создать проект и настроить форму.

  4. Обязательно прикрепить иконку.

Preview 09:01

На этом уроке мы нарисуем домик из двух линий и прямоугольника.

Самостоятельное задание:

  1. Разместить на форму визуальный компонент PictureBox.

  2. Создать Bitmap, Graphics, Pen.

  3. Нарисовать две линии.

  4. Нарисовать прямоугольник.

Preview 08:09
+ Инкапсуляция
10 lectures 02:09:22

На этом уроке мы создадим первый класс - Line, и перепишем программу, чтобы она работала точно так же.

Самостоятельное задание:

  1. Создать класс Line в новом файле Line.cs.

  2. Описать поля и создать конструктор.

  3. В основном классе создать функцию Init.

  4. Оформить используемые переменные полями основного класса.

  5. Переписать программу, чтобы она работала с классом Line.

Preview 09:52

На этом уроке мы создадим второй вспомогательный класс - Box, а также порассуждаем на тему "наследования" и переделаем программу.

Самостоятельное задание:

  1. Создать класс Box в файле Box.cs

  2. Добавить поля width и height.

  3. Переделать программу с использованием класса Box.

  4. Подготовить скриншот с раскрытым деревом классов.

Второй класс
09:12

Создадим класс для описания окружности - Circle. Нарисуем окружность в центре домика.

Самостоятельное задание:

  1. Добавить класс Circle в файле Circle.cs.

  2. Добавить поля width и height.

  3. Нарисовать окружность в центре домика.

  4. Убрать неиспользуемые строки using.

  5. Приложить скриншот созданной программы на фоне дерева классов.

Круглый класс
08:09

Создадим структуру для задания координат пикселя и перепишем классы и программу с её использованием.

Почитать об отличии класса от структуры можно дополнительно по ссылке (см. ниже)

Самостоятельное задание:

  1. Создать структуру Pixel.

  2. Описать и определить точки домика A, B, C, D, E, O.

  3. Создать дополнительный конструктор в каждом классе.

  4. Переписать создание экземпляров через наши пиксели.

  5. Приложить скриншот запущенной программы и дерева классов.

Структура пикселя
10:54

На этом дополнительном уроке наглядно демонстрируются главные отличия между struct и class в языке C#.

Самостоятельное задание:

  1. Набросать маленькую программку с "одинаковыми" структурой и классом.

  2. Добавить две функции, которые меняют значения переданных параметров.

  3. Убедиться в том, что структура и класс обрабатываются по-разному.

  4. Приложить скриншот в режиме отладки.

Preview 25:04

На этом уроке мы продолжим внедрение структуры Pixel в наши классы. Будем её использовать для хранения координат внутри класса, а также избавимся от повторяемого кода внутри конструкторов.

Самостоятельное задание:

  1. В классе каждой фигуры для хранения координат использовать структуру Pixel.

  2. Убрать повторяемый код из конструкторов, используя вызов через : this ().

  3. Изменить функции Draw для рисования фигур так, чтобы они работали.

Пиксели для классов
14:43

Как вычислить расстояние между двумя пикселями? Есть специальная формула, которую можно разместить в структуру Pixel. Теперь мы сможем создать ещё один конструктор окружности по центру и любой точке на окружности.

Самостоятельное задание:

  1. Добавить в структуру Pixel метод distance.

  2. Создать ещё один конструктор для Circle.

  3. Выводить в программе две разные окружности.

Расстояние между пикселями
12:11

Возьмём цветные карандаши, чтобы раскрасить наш домик. Создаём новые классы для цветных линий, окружностей и прямоугольников.

Самостоятельное задание:

  1. Создать класс ColorLine, ColorCircle, ColorBox.

  2. Добавить в каждый новый класс поле для цветного карандаша Pen.

  3. В основную программу добавить экземпляры цветных линий, круга и боксика.

Цветные карандаши
14:53

На этом уроке мы создадим ... Снеговика (спрайт) — более сложную фигуру, которая состоит из других фигур. В дальнейшем мы будем работать с такими спрайтами, перемещать их, поворачивать, масштабировать, а пока ... мы просто нарисуем Снеговика.

Самостоятельное задание:

  1. Нарисовать снеговика на листе в клеточку или в Paint.

  2. Проставить все точки и выписать их координаты.

  3. Создать экземпляры всех базовых фигур.

  4. Приложить скриншот Снеговика!

Рисуем Снеговика
14:39

На этом уроке мы создадим второй спрайт — ещё одного снеговика, но разноцветного.

Вопрос для перехода к следующему уроку:

Что нужно изменить в этой программе, чтобы мы могли:

а) перемещать снеговика;

б) поворачивать снеговика;

в) изменять размер снеговика.

Самостоятельное задание:

  1. Нарисовать разноцветного снеговика рядом с первым.

  2. Написать в отчёте ответы на три вопроса.

  3. * Сделать перемещение и/или масштабирование.

Второй Снеговик
09:45
+ Наследование
5 lectures 01:00:39

Наконец-таки мы возьмёмся за наследование. Убираем повторяющийся код из цветных классов. Осмысливаем значение термина «наследование».

Самостоятельное задание:

  1. Использовать наследование в разноцветных классах.

  2. Убрать повторяющийся код и вызывать родительский конструктор.

  3. Написать определение «наследования» своими словами.

Богатое наследство
12:52

Очень хочется все элементы снеговика поместить в один массив. Сейчас это сделать нельзя — придётся делать три массива: для кругов, для линий и для боксиков...

Решение гениальное — создаём базовый класс фигуры Shape, создаём массив фигур, и все фигуры помещаем в этот массив! После размещения фигур в массив можно видеть, что каждая фигура в нём хранится не как фигура, а под своим типом. А все под одной крышей они могут находится потому, что все они — фигуры, так как унаследованы от Shape.

Самостоятельное задание:

  1. Создать пустой базовый класс Shape.

  2. Все фигуры унаследовать от класса Shape.

  3. Поместить все части снеговика в один массив.

  4. Сократить функцию Draw() для рисования снеговиков.

  5. Ответить в отчёте на вопрос — как реализовать функцию Draw (Shape shape).

Фигуральный базовый класс
10:55

На этом уроке мы реализуем метод Draw (Shape shape) через серию условных операторов, а также создадим функцию для рисования целевого спрайта (снеговика) — Draw (Shape [ ] shapes).

Результат работы программы не изменяется, а вот содержимое кода всё более и более облагораживается.

Самостоятельное задание:

  1. Реализовать функцию Draw (Shape shape).

  2. Реализовать функцию Draw (Shape [ ] shapes).

  3. Для чего нам понадобится переменная Shape.position?

Рисователь снеговиков
11:50

На этом уроке мы начнём переносить функции для рисования фигур из основной программы в классы.

Самостоятельное задание:

  1. Добавить в класс Circle метод Draw().

  2. Добавить в класс Circle поля graph и pen.

  3. Создать инициализаторы этих полей SetGraphics() и SetPen().

  4. Убрать из основной программы метод Draw (Circle circle).

  5. Изменить метод Draw(Shape shape) для вызова Circle.Draw().

Переезд метода Draw
11:53

На этом уроке мы напишем функции для рисования фигур во всех остальных классах.

Самостоятельное задание:

  1. Перенести поля Graph и Pen из класса Circle в базовый класс Shape.

  2. Перенести методы SetGraphics() и SetPen() из класса Circle в базовый класс Shape.

  3. Переделать вызов этих методов — вызывать в цикле для всех фигур каждого снеговика.

  4. Перенести методы Draw() из основной программы в классы Line и Box.

  5. Убрать метод SetPen, добавив инициализацию карандаша в соотв. конструкторы.

Переезд graph в базовый класс
13:09
+ Полиморфизм
5 lectures 52:31

На этом уроке мы создадим в базовом классе функцию Draw(), и при её вызове через механизм полиморфизма будет запускаться созвучный метод нужного класса.

Самостоятельное задание:

  1. Создать метод Draw() в базовом классе Shape.

  2. Используя слово override подключить механизм полиморфизма.

  3. Убрать из основной программы метод Draw (Shape shape), заменив его очевидным вызовом.

  4. Выполнить алгоритм рисования снеговиков пошагово и порадоваться силе полиморфизма.

Мощь полиморфизма
09:00

На этом уроке мы создадим новый класс — Sprite, в котором будет хранится список всех фигур, из которых строится графический объект, для того чтобы в основной программе мы могли оперировать сразу спрайтами, а не их составными элементами.

Самостоятельное задание:

  1. Создать класс Sprite.

  2. Описать список фигур через коллекцию List<Shape>.

  3. Создать методы AddShape () и Clear ().

  4. Создать перегруженный метод Draw ().

  5. В основной программе описать снеговиков типом Sprite и переделать инициализацию.

  6. Укоротить функцию Draw() основной программы и удалить оттуда всё лишнее.

Спрайт для Снеговика
12:27

На этом уроке мы начнём реализовывать идею перемещения спрайтов.

Начнём, как обычно, с простого. Научимся перемещать один кружок.

Самостоятельное задание:

  1. Создать метод Move() в базовом классе.

  2. Нарисовать кружок в отдельной функции основной программы.

  3. Добавить кнопку для перемещения кружка.

  4. Изменить метод Circle.Draw(), чтобы кружок перемещался.

  5. Уяснить отличие координат кружка от координаты position.

  6. Убедиться, что кружок перемещается при нажатии на кнопочку.

Перемещение круга
11:41

На этом уроке мы переделаем метод Draw() для остальных фигур — Line и Box(). Наша программа теперь по нажатию кнопочки будет перемещать сразу три фигурки.

Самостоятельное задание:

  1. Нарисовать в Paint фигуру из трёх фигур - линия + круг + боксик.

  2. Нарисовать такую же фигуру в функции Demo ().

  3. Переписать методы Line.Draw() и Box.Draw().

  4. Сделать, чтобы фигурка перемещалась по нажатию кнопочки.

Перемещение других фигур
08:36

На этом уроке мы научим перемещаться целых снеговиков. Для этого нам не нужно будет менять метод Draw(), мы воспользуемся полиморфизмом!

Самостоятельное задание:

  1. Создать перегруженный метод Sprite.Move ().

  2. Вернуть отображение снеговиков.

  3. Избавиться от переменной delta при инициализации snowman2.

  4. Сделать перемещение снеговиков по нажатию кнопочки.

Перемещение Снеговиков
10:47
+ Интерфейс
16 lectures 03:20:35

На этом уроке я объясню своими словами, что такое интерфейс. Мы поговорим об игре "Голя" или "Сифа" или "Вода", о том, кто в неё может играть, и что делать тем, кто не знает правила игры. В конце урока мы создадим наш интерфейс.

Правила игры:

  • Выбирается ведущий.

  • Его цель - догнать и дотронуться до кого-либо из участников.

  • Цель остальных - не допустить этого.

  • Когда ведущий дотронется до кого-либо (заголит), ведущим становится новый участник.

Самостоятельное задание:

  1. Создать файл с интерфейсом Игрок.cs

  2. Написать своими словами определение Интерфейса.

Зачем нужен Интерфейс
09:32

На этом уроке мы поговорим о правилах игры в догоняшки. На прошлом уроке мы выясняли, что должны уметь делать игроки. На этом уроке мы начнём писать класс, в котором опишем конкретные правила нашей игры.

Самостоятельное задание:

  1. Создать класс GameCatch.

  2. Описать поля gamers и leader.

  3. Создать конструктор.

  4. Создать публичные методы AddGamer(Игрок), Step() и RunAll().

  5. Написать словесный алгоритм метода FindNewLeader().

  6. Написать словесный алгоритм метода SetNewLeader().

  7. Приложить скриншот созданного класса.

Правила игры
12:22

На этом уроке мы допишем класс GameCatch. Напишем реализацию методов FindNewLeader() и SetNewLeader().

Ваша задача - подумать и написать, что нужно ещё сделать, чтобы можно было начать играть в эту игру.

Самостоятельное задание:

  1. Написать метод FindNewLeader().

  2. Написать метод SetNewLeader().

  3. Что ещё нужно сделать, чтобы начать играть в игру?

Алгоритм игры
07:47

На этом уроке мы создадим объект для нашей игры - Кружок! У кружочка есть координаты центра, радиус и цвет.

Цель урока - создать класс Circle.cs

Самостоятельное задание:

  1. Создать класс Circle.cs .

  2. Описать три поля - center, radius, color.

  3. Создать конструктор Circle (x, y, r).

  4. Написать в комментариях, что и как нужно сделать дальше.

Создаём кружок
08:35

На этом уроке мы начнём создавать класс Arena, который создаст поле для игры и реализует методы для отображения объектов на экране.

Самостоятельное задание:

  1. Создать класс Arena.cs .

  2. Описать статичные поля Range и random.

  3. Описать приватные поля picture и graphics.

  4. Создать конструктор.

  5. Создать метод Clear ().

  6. Написать своими словами, зачем нужен класс Arena.

Площадка для игры
11:57

На этом уроке мы допишем класс Arena, реализуем методы Show(Circle), Refresh(), static NewCircle(). Всё готово к созданию кода для отображения кружка из класса Form1.cs!

Самостоятельное задание:

  1. Создать метод Show(Circle).

  2. Создать метод Refresh().

  3. Создать метод static new Circle().

  4. Попробовать самостоятельно это всё запустить.

  5. К отчёту приложить скриншот проекта с раскрытыми классами.

Кружок на площадке
11:48

На этом уроке мы настроим нашу форму, напишем несколько волшебных строчек, и ... программа заработает!!! У нас будет много-много кружков на экране -))

Самостоятельное задание:

  1. Настроить форму: Text, BorderStyle, StartPosition, MaximizeBox.

  2. Приделать иконку к форме и к исполняемому файлу.

  3. Разместить визуальный компонент PictureBox на форму.

  4. Установить для него Dock и BackColor.

  5. Разместить кнопку и сгенерировать событие для неё.

  6. Написать код для создания кружков.

  7. Протестировать работу программы и порадоваться :)

  8. Приложить скриншот результата.

Запускаем кружки на площадку!
11:48

На этом уроке мы унаследуем кружок от интерфейса Игрок. Теперь для запуска программы нам придётся реализовать методы из его интерфейса. В этом уроке мы реализуем методы Голя() и НеГоля().

Самостоятельное задание:

  1. Наследовать Circle от Игрок.

  2. Выписать заголовки всех новых методов.

  3. Реализовать методы Голя() и НеГоля() через color.

  4. Приложить скриншот этих методов.

  5. Описать словами содержимое методов Беги() и Поймал().

Кружок хочет играть
09:41

На этом уроке мы допишем методы Игрока в классе Circle. Реализуем метод Беги() и Поймал(), и даже исправим недочёты в описании интерфейса (!!). В конце урока я ответил на многочисленные вопросы участников.

Самостоятельное задание:

  1. Реализовать метод Беги().

  2. Реализовать метод Поймал().

  3. Разобраться в новых функциях Cross() и Distance().

  4. Написать словами, что нужно для запуска игры.

Кружок готов к игре!
20:46

На этом уроке мы добавим в форму класс GameCatch, разместим таймер и наконец-таки запустим нашу игру. Шарики начнут гоняться друг за другом!

Самостоятельное задание:

  1. Добавить в форму класс game.

  2. Изменить метод buttonAddGamer_Click ().

  3. Разместить на форму таймер и создать его метод.

  4. Реализовать метод timer_Tick ().

  5. Не забыть включить таймер.

  6. Доработать Arena.NewCircle() для задания начального направления.

  7. Исправить ошибку в Arena.FindNewLeader().

  8. Написать словами, как исправить недочет с переголением.

Кружочки гоняются друг за другом
11:52

На этом уроке мы добавим в правила игры задержку после получения Голи. Ведущий будет считать до 10 и только потом сможет голить других.

Твоя задача - придумать новую игру, в которую смогут играть Игроки, то есть объекты, которые умеют делать то, что описано в интерфейсе Игрок.

Самостоятельное задание:

  1. Добавить поле leaderSkipSteps и константу MaxSkipTests.

  2. Добавить задержку после получения сифы, SetNewLeader().

  3. Добавить ограничение на заголивание, FindNewLeader().

  4. Протестировать игру по новым правилам.

  5. Придумать свои правила новой игры и описать её в комментариях.

  6. Приложить красивый скриншот шариков.

Изменяем правила игры
10:21

На этом уроке мы начнём делать новую игру - Вирус. Смысл игры подробно рассказан на видео.

Цель урока: создать класс GameVirus и реализовать методы GameViurs(), AddGamer(), Step(), RunAll().

Также нужно придумать и написать словами алгоритм методов SetNewVirus(Игрок) и FindNewVirus().

Самостоятельное задание:

  1. Понять правила новой игры.

  2. Создать класс GameVirus.cs

  3. Добавить поля List<Игрок> gamers и virused.

  4. Реализовать конструктор GameViurs().

  5. Реализовать методы AddGamer(), Step(), RunAll().

  6. Описать словами работу метода SetNewVirus(Игрок).

  7. Описать словами работу метода FindNewVirus().

Создаём новую игру
12:30

На этом уроке мы допишем последние две функции и надолго залипнем в экран, наблюдая за новой игрой для наших кружков, как вирусная эстафета может быстро передаваться, особенно, когда игроков очень много. В комментариях написать свой отзыв об этой серии уроков.

Следующие уроки не обязательны для выполнения.

Какой курс ты будешь проходить следующим?

Самостоятельное задание:

  1. Реализовать метод SetNewVirus(Игрок).

  2. Реализовать метод FindNewVirus().

  3. Запустить новую игру, сменив в FormGame - GameCatch на GameVirus.

  4. Попробовать обездвижить заражённых игроков.

  5. Написать в комментариях отзыв об этой серии уроков.

  6. Какой курс ты будешь проходить следующим?

ФИНАЛЬНЫЙ УРОК
13:04

На этом уроке мы создадим новый класс Box. Квадратики тоже хотят играть в эту игру, и просят их научить. Пока они ещё не умеют ловить, но уже смогут отображаться и передвигаться.

Полезные ссылки для написания функции Поймал:

  • http://xdan.ru/how-to-check-intersect-two-rectangles.html

  • http://stackoverflow.com/questions/306316/determine-if-two-rectangles-overlap-each-other

Самостоятельное задание:

  1. Создать класс Box.

  2. Создать нужные поля и конструктор.

  3. Расширить класс до Box : Игрок.

  4. Создать все необходимые поля и методы.

  5. Попробовать реализовать метод Поймал().

Квадратики тоже хотят играть
16:22

На этом уроке мы допишем метод Box.Поймал() и запустим игру с квадратиками. Потом попробуем подружить квадратики с кружками, увидим, что это не так просто, да собственно и не нужно. Но возможно.

Самостоятельное задание:

  1. Дописать метод Box.Поймал()

  2. Сделать метод Arena.Show (Box box).

  3. Сделать добавление в игру и кружков и квадратиков.

  4. Сделать метод Arena.Show (Игрок obj).

Пересечение прямоугольников
09:46

На этом уроке мы создадим "универсальный" класс Crosser, который сможет проверять на возможное столкновение "любых" двух Игроков. Конечно не любых, а только двух наших Box и Circle. Это яркий пример способа добавления класса, который лучше не применять (по возможности) в программах. Потому что такой способ не добавляет универсальности, так как при объявлении новых объектов придётся дописывать кучу новых функций на сравнение.

Самостоятельное задание:

  1. Создать класс Crosser.

  2. Изменить классы Box и Circle на использование Crosser.

  3. Записать видеообзор своего проекта и рассказать, что такое Interface.

Дружба кругов и квадратов
22:24
Requirements
  • Базовые понятия языка C#
  • Visual Studio и C#
Description

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

Мы постоянно применяем рефакторинг кода, демонстрируем приёмы Объектно-ориентированного программирования. Вы сможете на собственном примере увидеть обоснованность и необходимость использования Инкапсуляции, Наследования и Полиморфизма.

Во второй части курса мы проработаем понятие Интерфейса на примере создания простой анимационной игры. Использование интерфейса позволит нам легко создавать новые правила игры не изменяя визуальной части.

Продолжительность каждого урока 10 минут.

Who this course is for:
  • Начинающие программисты, которые хотят понять суть ООП.