Files
Igor-kr/OOP/task/5/TASK.md
T
2026-07-14 12:20:34 +03:00

73 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### Задача 5. Библиотека (ООП - Инкапсуляция и Взаимодействие)
**Постановка**
* **Книга:** Имеет название, автора и статус (*"В библиотеке"*, *"Выдана"*). Может менять свой статус на противоположный.
* **Читатель:** Имеет имя и список взятых книг. Может брать и возвращать книги.
* **Библиотека:** Содержит список всех доступных книг. Может выдавать книгу читателю.
**Задание**
**Класс `Book`:**
1. Создайте класс `Book`.
2. В `__init__(self, title, author)` определите свойства `title`, `author` и `status` (по умолчанию *"В библиотеке"*).
3. Создайте метод `change_status(self)`, меняющий статус книги на *"Выдана"*, если она в библиотеке, и обратно.
**Класс `Reader`:**
1. Создайте класс `Reader`.
2. В `__init__(self, name)` сохраните имя и создайте пустой список `borrowed_books`.
3. Создайте метод `take_book(self, book)`, добавляющий переданную книгу в список.
4. Создайте метод `return_book(self, book)`, удаляющий книгу из списка.
**Класс `Library`:**
1. Создайте класс `Library`.
2. В `__init__(self)` создайте список `books` и добавьте туда несколько книг по умолчанию.
3. Создайте метод `lend_book(self, book, reader)`, который проверяет статус книги, меняет его через метод книги на *"Выдана"* и передает читателю в его список.
**Тесты:**
1. Создайте библиотеку.
2. Создайте читателя.
3. Используя библиотеку, выдайте читателю книгу.
---
### Задача 6. Магазин (ООП - Агрегация)
**Постановка**
* **Товар:** Имеет название и цену.
* **Корзина:** Содержит список товаров. Может добавлять товар и считать общую стоимость.
* **Покупатель:** Имеет имя, баланс и корзину. Может оплачивать корзину.
**Задание**
**Класс `Product`:**
1. Создайте класс `Product`.
2. Создайте метод `__init__(self, name, price)`.
**Класс `Cart`:**
1. Создайте класс `Cart`.
2. В `__init__(self)` создайте пустой список `products`.
3. Создайте метод `add_product(self, product)`, добавляющий товар в список.
4. Создайте метод `get_total(self)`, возвращающий сумму цен всех товаров.
**Класс `Customer`:**
1. Создайте класс `Customer`.
2. В `__init__(self, name, balance, cart)` сохраните переданные параметры.
3. Создайте метод `pay(self)`, который проверяет, хватает ли баланса для оплаты корзины. Если хватает — вычитает сумму из баланса и очищает корзину. Если нет — выводит предупреждение.
**Тесты:**
1. Создайте несколько товаров.
2. Создайте корзину и добавьте в нее товары.
3. Создайте покупателя, передав ему корзину и баланс.
4. Заставьте покупателя оплатить товары в корзине.