# Abstraction

Record: `arch:abstraction`
Kind: principle
Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)
Severity: mandatory
Scope: class, module, service, system
Canonical: https://banes-lab.com/ontology#arch-abstraction

## Repair

- Refactored by: Extract Interface, Introduce Port, Generalize Dependency
- Detected by: concrete type usage across boundaries
- Violated by: hardcoded implementation dependency, implementation leakage
- Measured by: abstraction ratio, interface stability
- Enforced by: architecture tests, dependency inversion rules

## requires

- [Stable Semantics](https://banes-lab.com/records/lex/stable-semantics.md)
- [Interface Definition](https://banes-lab.com/records/lex/interface-definition.md)

## reinforces

- [Dependency Inversion Principle (DIP)](https://banes-lab.com/records/arch/dependency-inversion.md)
- [Low Coupling](https://banes-lab.com/records/arch/low-coupling.md)
- [Portability](https://banes-lab.com/records/arch/portability.md)

## enables

- [Polymorphism](https://banes-lab.com/records/arch/polymorphism.md)
- [Replaceability](https://banes-lab.com/records/arch/replaceability.md)

## conflicts-with

- [Concrete Coupling](https://banes-lab.com/records/arch/concrete-coupling.md)
- [Middle Man](https://banes-lab.com/records/arch/middle-man.md)

## tensions-with

- [Simplicity](https://banes-lab.com/records/lex/simplicity.md)

## tensions

- [Abstraction Simplicity](https://banes-lab.com/records/tension/abstraction-simplicity.md)

## referenced-by

- [Interface-Based Design](https://banes-lab.com/records/arch/interface-based-design.md)
- [Separation of Concerns](https://banes-lab.com/records/arch/separation-of-concerns.md)
- [Do Not Repeat Yourself (DRY)](https://banes-lab.com/records/arch/duplicate-code.md)
- [Low Coupling](https://banes-lab.com/records/arch/low-coupling.md)
- [Encapsulation](https://banes-lab.com/records/arch/encapsulation.md)
- [Reusability](https://banes-lab.com/records/arch/reusability.md)
- [Inversion of Control (IoC)](https://banes-lab.com/records/arch/inversion-of-control.md)
- [Dependency Injection](https://banes-lab.com/records/arch/dependency-injection.md)
- [Portability](https://banes-lab.com/records/arch/portability.md)
- [Dynamic Binding](https://banes-lab.com/records/arch/dynamic-binding.md)
- [Dependency Inversion Principle (DIP)](https://banes-lab.com/records/arch/dependency-inversion.md)
- [Open/Closed Principle (OCP)](https://banes-lab.com/records/arch/open-closed.md)
- [Polymorphism](https://banes-lab.com/records/arch/polymorphism.md)
