Skip to content

Object-oriented technology class at Chelyabinsk State University, 2021

Notifications You must be signed in to change notification settings

igor-shevchenko/csu-oop-2021

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 

Repository files navigation

Объектно-ориентированные технологии

Лекции и материалы по курсу ООТ в ЧелГУ, группы МИВТ-101, МИТ-101.

Лекции

1. Введение в ООТ

Презентация

Литература

  1. Стив Макконнелл. Совершенный код
  2. Эндрю Троелсен. Язык программирования C#
  3. Курсы по C# на https://ulearn.me/

Задача

В компании работают менеджеры, техники и водители:

  • Менеджеры и техники получают фиксированную ежемесячную зарплату.
  • У водителей оплата почасовая.
  • Заработная плата техников и водителей зависит от их категории (A, B или C). Категория предоставляет коэффициент от базовой зарплаты: A - 125%, B - 115%, С - 100%.
  • Все работники могут получить фиксированную премию за месяц, которая прибавляется к их основной заработной плате.

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

Код решения

2. Принципы разработки ПО

Презентация

Литература

  1. Эндрю Хант, Дэвид Томмс. Программист - прагматик. Путь от подмастерья к мастеру
  2. 97 вещей, которые должен знать каждый программист

3. Проектирование модулей

Презентация

Задача

Написать консольный туду-лист с возможностью сохранять состояние в файле.

Код для туду-листа уже есть, надо разделить его на модули.

Код, который надо отрефакторить

4. Принципы SOLID

Презентация

Литература

  1. Роберт Мартин. Принципы, паттерны и методики гибкой разработки на языке C#
  2. Серия постов Сергея Теплякова про SOLID
  3. Серия постов Александра Бындю про SOLID

5. Паттерны проектирования

Презентация

Литература

  1. Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования
  2. Эрик Фримен, Элизабет Фримен, Кэтти Сьерра, Берт Бейтс. Паттерны проектирования
  3. Паттерны проектирования на refactoring.guru

6. Практика по паттернам

Репозиторий с задачами

7. Тестирование и TDD

Презентация

Задача

С использованием подхода TDD написать программу для перевода римских чисел в обычные. В программе должно быть два модуля:

  1. Модуль, который переводит римское число в обычное
  2. Модуль, который читает документ и переводит все римские числа из него в обычные с помощью первого модуля

Код решения

8. Концепции C#

Презентация

9. Технический долг

Презентация

Литература

  1. Мартин Фаулер. Рефакторинг
  2. Каталог рефакторингов на refactoring.guru
  3. Подкаст «Подлодка» с Александром Бындю о техдолге
  4. Статья Александра Бындю про технический долг
  5. Синдром рефакторинга

10. Практика

Задача

Реализовать модуль корзины для вычисления общей стоимости заказа в пиццерии:

  • Пиццерия продает два вида товаров: пиццы и напитки
  • Заказ можно забрать в пицерии или оформить доставку
  • Доставка действует только для заказов, содержащих хотя бы одну пиццу, и стоит 150 рублей, заказы от 1000 рублей доставляются бесплатно.
  • Есть промокоды: на конкретную пиццу бесплатно, на бесплатную доставку, на скидку X%, на скидку X рублей
  • Есть акция: при покупке четырех больших пицц пиццерия дарит одну любую маленькую пиццу.
  • Система должна быть расширяемой: легко добавить новые правила, скидки, виды промокодов и товаров

Код решения

11. Domain-Driven Design

Презентация

Код примера

Литература

  1. Эрик Эванс. Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем
  2. Domain Driven Design Quickly — краткое содержание книги Эрика Эванса
  3. Harry Percival, Bob Gregory. Architecture Patterns with Python
  4. Лекция по DDD на ulearn.me

12. Практика

Реализовать структуру данных «множество» на основе бинарного дерева поиска. Структура данных должна:

  1. Реализовывать интерфейс ISet
  2. Поддерживать сохранение в файл и загрузку из файла (можно использовать встроенный механизм сериализации)
  3. Быть покрыта юнит-тестами

Код решения

Практика

Задача 1. Родственные связи

Напишите программу, которая моделирует родственные связи. Программа позволяет создать объекты типа Person и указывать, кто из людей кому является родителем и кто с кем состоит в браке.

Должны быть функции, позволяющие для каждого человека получить список:

  • Родителей
  • Двоюродных братьев и сестер
  • Дядюшек и тетушек
  • In-laws (cвекра и свекрови или тестя и тещи)

Задача 2. Книжный магазин

Реализовать модуль корзины для вычисления общей стоимости заказа в книжном интернет-магазине:

  1. Два вида книг: бумажные и электронные
  2. Для бумажных книг доставка от 1000 рублей бесплатная, иначе 200 рублей. Для электронных всегда бесплатная
  3. Есть промокоды: на конкретную книгу бесплатно, на бесплатную доставку, на скидку X%, на скидку X рублей
  4. Есть акция: при покупке двух бумажных книг одного автора одна электронная книга того же автора в подарок
  5. Система должна быть расширяемой: легко добавить новые правила, скидки, виды промокодов и книг

Задача 3. Бинарное дерево поиска

Реализовать структуру данных «словарь» на основе бинарного дерева поиска. Структура данных должна:

  1. Реализовывать интерфейс IDictionary<TKey,TValue>
  2. Поддерживать сохранение в файл и загрузку из файла (можно использовать встроенный механизм сериализации)
  3. Быть покрыта юнит-тестами

Вопросы к экзамену

  1. Парадигма ООП
  2. Принципы разработки: DRY, KISS, YAGNI
  3. Coupling и cohesion
  4. Принципы SOLID: SRP
  5. Принципы SOLID: OCP
  6. Принципы SOLID: LSP
  7. Принципы SOLID: ISP
  8. Принципы SOLID: DIP
  9. Паттерны проектирования: порождающие паттерны
  10. Паттерны проектирования: структурные паттерны
  11. Паттерны проектирования: поведенческие паттерны
  12. Юнит-тесты
  13. TDD
  14. Интерфейсы и абстрактные классы
  15. Наследование и композиция
  16. Технический долг
  17. Рефакторинг
  18. Моделирование преметной области по DDD
  19. Слоистая архитектура

Литература

  1. Стив Макконнелл. Совершенный код
  2. Роберт Мартин. Принципы, паттерны и методики гибкой разработки на языке C#
  3. Роберт Мартин. Чистая архитектура. Искусство разработки программного обеспечения
  4. Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования
  5. Эрик Фримен, Элизабет Фримен, Кэтти Сьерра, Берт Бейтс. Паттерны проектирования
  6. Сергей Тепляков. Паттерны проектирования на платформе .NET
  7. Мартин Фаулер. Рефакторинг
  8. Эрик Эванс. Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем (либо краткое содержание)

About

Object-oriented technology class at Chelyabinsk State University, 2021

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages