Проект: MiniSocial
Введение от технического руководителя
Команда, нам поручили разработать прототип новой социальной сети.
Бюджет ограничен, сроки сжатые, поэтому начинаем с минимального набора функций.
Наша задача — постепенно построить систему так, чтобы её можно было расширять без переписывания кода.
На каждом этапе заказчик будет приносить новые требования. Вам предстоит дорабатывать существующий код, а не писать всё заново.
⸻
Задача №1. Модель пользователя
Контекст
Сейчас в системе нет пользователей.
Любая социальная сеть начинается с аккаунта.
Требование
Разработать класс:
User
Каждый пользователь должен хранить:
- имя
Пример работы
user = User("Alex")
print(user.name)
Результат:
Alex
Критерии приемки
- существует класс User
- имя задаётся при создании объекта
- имя доступно через атрибут
⸻
Задача №2. Профиль пользователя
Контекст
Заказчик хочет отображать дополнительную информацию о пользователе.
Требование
Добавить:
- возраст
- город
Пример
user = User(
"Alex",
15,
"Москва"
)
Критерии приемки
Данные сохраняются внутри объекта.
⸻
Задача №3. Отображение профиля
Контекст
Сейчас данные есть, но пользователь не может посмотреть свой профиль.
Требование
Добавить метод:
show_profile()
Пример вывода:
Имя: Alex
Возраст: 15
Город: Москва
Ограничения
Метод должен брать данные из объекта.
⸻
Задача №4. Подписчики
Контекст
Для социальной сети важно понимать популярность пользователя.
Требование
Добавить счетчик подписчиков.
Начальное значение:
0
Добавить метод:
follow()
Каждый вызов увеличивает количество подписчиков.
⸻
Пример
user.follow()
user.follow()
Результат:
2
⸻
Задача №5. Публикация контента
Контекст
Пользователи не могут ничего публиковать.
Социальная сеть бесполезна.
Требование
Создать новый класс:
Post
Каждый пост хранит:
- текст
⸻
Пример
post = Post(
"Сегодня изучаю Python"
)
⸻
Задача №6. Пользователь создаёт пост
Контекст
Пост существует отдельно от пользователя.
Это неудобно.
Требование
Каждый пользователь должен иметь список своих публикаций.
Добавить:
self.posts
Метод:
create_post()
⸻
Пример
user.create_post(
"Первый пост"
)
⸻
Ожидаемый результат
Пост появляется внутри коллекции пользователя.
⸻
Задача №7. Лайки
Контекст
Заказчик хочет видеть реакцию аудитории.
Требование
Добавить в пост:
likes
Метод:
like()
⸻
Пример
post.like()
post.like()
Результат:
2
⸻
Задача №8. Лента пользователя
Контекст
Пользователь должен видеть свои публикации.
Требование
Добавить метод:
show_posts()
⸻
Пример вывода
- Первый пост
- Сегодня изучаю Python
- Мой кот сломал клавиатуру
⸻
Задача №9. Комментарии
Контекст
Пользователи хотят общаться под публикациями.
Требование
Создать класс:
Comment
Поля:
- автор
- текст
Каждый пост должен хранить список комментариев.
⸻
Пример
comment = Comment(
"Max",
"Классный пост"
)
⸻
Задача №10. Система рейтинга
Контекст
Нужно определять самых популярных пользователей.
Требование
Реализовать метод:
get_rating()
Формула:
1 подписчик = 5 очков
1 лайк = 1 очко
⸻
Пример
Подписчики: 10
Лайки: 50
Рейтинг:
100
⸻
Задача №11. VIP аккаунты
Контекст
Появилась платная подписка.
Требование
Создать класс:
VIPUser
На основе:
User
Особенности:
- рейтинг умножается на 2
- можно закреплять посты
⸻
Задача №12. Топ пользователей
Контекст
Администрация хочет видеть лидеров платформы.
Требование
Имея список пользователей:
users = [...]
найти пользователя с максимальным рейтингом.
⸻
Вывод
Лучший пользователь: Alex
Рейтинг: 350
⸻
Задача №13. Модерация
Контекст
Некоторые сообщения нарушают правила платформы.
Требование
Создать класс:
Moderator
Метод:
delete_post()
⸻
После удаления пост исчезает из профиля пользователя.
⸻
Задача №14. Жалобы
Контекст
Пользователи должны иметь возможность жаловаться на контент.
Требование
Каждый пост хранит:
reports
Метод:
report()
Если жалоб больше 10:
Пост скрыт
⸻
Финальная задача
Контекст
Заказчик хочет увидеть демонстрацию системы.
Необходимо
Создать:
- 5 пользователей
- 1 VIP пользователя
- минимум 15 постов
- минимум 50 лайков
- комментарии
- подписчиков
- жалобы
После запуска программы вывести:
Количество пользователей
Количество постов
Количество комментариев
Самый популярный пользователь
Самый популярный пост
Посты, скрытые модерацией
⸻
После выполнения всех этапов ученик незаметно для себя проходит:
- классы
- объекты
- атрибуты
- методы
- списки объектов
- композицию
- наследование
- полиморфизм
- взаимодействие объектов
И главное — понимает, зачем это нужно, потому что каждая следующая задача ломает предыдущую архитектуру и заставляет улучшать модель данных, как это происходит в настоящей разработке.