47 lines
4.1 KiB
Markdown
47 lines
4.1 KiB
Markdown
|
---
|
|||
|
aliases:
|
|||
|
tags:
|
|||
|
- maturity/🌱
|
|||
|
date: 2024-09-27
|
|||
|
zero-link:
|
|||
|
- "[[../../meta/zero/00 Архитектура ПО|00 Архитектура ПО]]"
|
|||
|
- "[[../../meta/zero/00 Архитектура ИС|00 Архитектура ИС]]"
|
|||
|
parents:
|
|||
|
linked:
|
|||
|
---
|
|||
|
В контексте разработки программного обеспечения **контракт** — это соглашение или набор правил, определяющий, как различные части системы (например, компоненты, классы или модули) взаимодействуют друг с другом. Контракт описывает обязанности и ожидания каждой из сторон (поставщика и потребителя), гарантируя, что при соблюдении этих условий взаимодействие будет корректным и предсказуемым.
|
|||
|
|
|||
|
Основные элементы контракта:
|
|||
|
- **Предусловия**: Условия, которые должны быть выполнены перед вызовом метода или началом взаимодействия. Например, входные данные метода должны быть корректными, а ресурс должен быть доступен.
|
|||
|
- **Постусловия**: Результаты, которые гарантируются после выполнения метода или операции, если предусловия были выполнены. Это может включать возвращаемое значение метода или состояние объекта после вызова.
|
|||
|
- **Инварианты**: Условия, которые остаются неизменными в течение жизни объекта. Например, допустимые диапазоны значений переменных или непротиворечивость состояния системы.
|
|||
|
## Примеры контрактов
|
|||
|
**Контракт в объектно-ориентированном программировании**: В [[ООП|ООП]] контракт может выражаться через интерфейсы или абстрактные классы, которые определяют набор методов, обязательных для реализации. Это позволяет программным компонентам общаться на основе общих соглашений, не зная конкретную реализацию.
|
|||
|
|
|||
|
Пример интерфейса как контракта:
|
|||
|
```java
|
|||
|
public interface Shape {
|
|||
|
double calculateArea(); // контракт: любой класс, реализующий Shape, обязан иметь этот метод
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
**Контракт API**: В контексте API контрактом является описание того, как клиент может взаимодействовать с API. Это включает в себя форматы запросов и ответов, методы HTTP, параметры, типы данных, кодировки и обработку ошибок.
|
|||
|
|
|||
|
Пример контракта REST API:
|
|||
|
- Метод: `POST /users`
|
|||
|
- Входные данные: JSON-объект с полями `name` и `email`
|
|||
|
- Ответ: код 201 (Created) и объект пользователя
|
|||
|
- Ошибки: код 400 (Bad Request) при некорректных данных
|
|||
|
***
|
|||
|
## Мета информация
|
|||
|
**Область**:: [[../../meta/zero/00 Архитектура ПО|00 Архитектура ПО]], [[../../meta/zero/00 Архитектура ИС|00 Архитектура ИС]]
|
|||
|
**Родитель**::
|
|||
|
**Источник**::
|
|||
|
**Создана**:: [[2024-09-27]]
|
|||
|
**Автор**::
|
|||
|
### Дополнительные материалы
|
|||
|
-
|
|||
|
|
|||
|
### Дочерние заметки
|
|||
|
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|