Лекции и материалы по курсу ООТ в ЧелГУ, группы МИВТ-101, МИТ-101.
Литература
- Стив Макконнелл. Совершенный код
- Эндрю Троелсен. Язык программирования C#
- Курсы по C# на https://ulearn.me/
Задача
В компании работают менеджеры, техники и водители:
- Менеджеры и техники получают фиксированную ежемесячную зарплату.
- У водителей оплата почасовая.
- Заработная плата техников и водителей зависит от их категории (A, B или C). Категория предоставляет коэффициент от базовой зарплаты: A - 125%, B - 115%, С - 100%.
- Все работники могут получить фиксированную премию за месяц, которая прибавляется к их основной заработной плате.
Напишите программу, которая получает информацию о работниках компании и вычисляет, сколько компания должна выплатить своим сотрудникам в конце месяца.
Литература
- Эндрю Хант, Дэвид Томмс. Программист - прагматик. Путь от подмастерья к мастеру
- 97 вещей, которые должен знать каждый программист
Задача
Написать консольный туду-лист с возможностью сохранять состояние в файле.
Код для туду-листа уже есть, надо разделить его на модули.
Код, который надо отрефакторить
Литература
- Роберт Мартин. Принципы, паттерны и методики гибкой разработки на языке C#
- Серия постов Сергея Теплякова про SOLID
- Серия постов Александра Бындю про SOLID
Литература
- Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования
- Эрик Фримен, Элизабет Фримен, Кэтти Сьерра, Берт Бейтс. Паттерны проектирования
- Паттерны проектирования на refactoring.guru
Задача
С использованием подхода TDD написать программу для перевода римских чисел в обычные. В программе должно быть два модуля:
- Модуль, который переводит римское число в обычное
- Модуль, который читает документ и переводит все римские числа из него в обычные с помощью первого модуля
Литература
- Мартин Фаулер. Рефакторинг
- Каталог рефакторингов на refactoring.guru
- Подкаст «Подлодка» с Александром Бындю о техдолге
- Статья Александра Бындю про технический долг
- Синдром рефакторинга
Задача
Реализовать модуль корзины для вычисления общей стоимости заказа в пиццерии:
- Пиццерия продает два вида товаров: пиццы и напитки
- Заказ можно забрать в пицерии или оформить доставку
- Доставка действует только для заказов, содержащих хотя бы одну пиццу, и стоит 150 рублей, заказы от 1000 рублей доставляются бесплатно.
- Есть промокоды: на конкретную пиццу бесплатно, на бесплатную доставку, на скидку X%, на скидку X рублей
- Есть акция: при покупке четырех больших пицц пиццерия дарит одну любую маленькую пиццу.
- Система должна быть расширяемой: легко добавить новые правила, скидки, виды промокодов и товаров
Литература
- Эрик Эванс. Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем
- Domain Driven Design Quickly — краткое содержание книги Эрика Эванса
- Harry Percival, Bob Gregory. Architecture Patterns with Python
- Лекция по DDD на ulearn.me
Реализовать структуру данных «множество» на основе бинарного дерева поиска. Структура данных должна:
- Реализовывать интерфейс ISet
- Поддерживать сохранение в файл и загрузку из файла (можно использовать встроенный механизм сериализации)
- Быть покрыта юнит-тестами
Напишите программу, которая моделирует родственные связи. Программа позволяет создать объекты типа Person
и указывать, кто из людей кому является родителем и кто с кем состоит в браке.
Должны быть функции, позволяющие для каждого человека получить список:
- Родителей
- Двоюродных братьев и сестер
- Дядюшек и тетушек
- In-laws (cвекра и свекрови или тестя и тещи)
Реализовать модуль корзины для вычисления общей стоимости заказа в книжном интернет-магазине:
- Два вида книг: бумажные и электронные
- Для бумажных книг доставка от 1000 рублей бесплатная, иначе 200 рублей. Для электронных всегда бесплатная
- Есть промокоды: на конкретную книгу бесплатно, на бесплатную доставку, на скидку X%, на скидку X рублей
- Есть акция: при покупке двух бумажных книг одного автора одна электронная книга того же автора в подарок
- Система должна быть расширяемой: легко добавить новые правила, скидки, виды промокодов и книг
Реализовать структуру данных «словарь» на основе бинарного дерева поиска. Структура данных должна:
- Реализовывать интерфейс IDictionary<TKey,TValue>
- Поддерживать сохранение в файл и загрузку из файла (можно использовать встроенный механизм сериализации)
- Быть покрыта юнит-тестами
- Парадигма ООП
- Принципы разработки: DRY, KISS, YAGNI
- Coupling и cohesion
- Принципы SOLID: SRP
- Принципы SOLID: OCP
- Принципы SOLID: LSP
- Принципы SOLID: ISP
- Принципы SOLID: DIP
- Паттерны проектирования: порождающие паттерны
- Паттерны проектирования: структурные паттерны
- Паттерны проектирования: поведенческие паттерны
- Юнит-тесты
- TDD
- Интерфейсы и абстрактные классы
- Наследование и композиция
- Технический долг
- Рефакторинг
- Моделирование преметной области по DDD
- Слоистая архитектура
- Стив Макконнелл. Совершенный код
- Роберт Мартин. Принципы, паттерны и методики гибкой разработки на языке C#
- Роберт Мартин. Чистая архитектура. Искусство разработки программного обеспечения
- Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования
- Эрик Фримен, Элизабет Фримен, Кэтти Сьерра, Берт Бейтс. Паттерны проектирования
- Сергей Тепляков. Паттерны проектирования на платформе .NET
- Мартин Фаулер. Рефакторинг
- Эрик Эванс. Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем (либо краткое содержание)