# SOLID / Object-Oriented Design

> Every term in this category is listed as one record, with its kind, its definition and its aliases, the principles whose relations name it, the principle or…

Page: Ontology · Lexicon
Canonical: https://banes-lab.com/ontology/lexicon#lex-category-solid-object-oriented-design

Every term in this category is listed as one record, with its kind, its definition and its aliases, the principles whose relations name it, the principle or contract that carries the same name where one exists, and the layer its category belongs to.

### Broken Inheritance

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Category: [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/lexicon/lex-category-solid-object-oriented-design.md)
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
A subclass that violates its base type's contract, so substituting it breaks callers that rely on the base behavior.

Referenced by
[Liskov Substitution Principle (LSP)](https://banes-lab.com/records/arch/liskov-substitution.md)

### Concrete Dependency

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Category: [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/lexicon/lex-category-solid-object-oriented-design.md)
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
Depending directly on a concrete implementation instead of an abstraction, coupling high-level code to low-level detail.

Referenced by
[Dependency Inversion Principle (DIP)](https://banes-lab.com/records/arch/dependency-inversion.md)

### Consumer-Specific Contracts

- Kind: [capability](https://banes-lab.com/records/kind/capability.md)
- Category: [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/lexicon/lex-category-solid-object-oriented-design.md)
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
The ability to give each client an interface exposing only the operations it uses.

Referenced by
[Interface Segregation Principle (ISP)](https://banes-lab.com/records/arch/interface-segregation.md)

### Contract Preservation

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Category: [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/lexicon/lex-category-solid-object-oriented-design.md)
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
The requirement that a subtype honor every behavioral guarantee of the type it replaces.

Referenced by
[Liskov Substitution Principle (LSP)](https://banes-lab.com/records/arch/liskov-substitution.md)

### Fat Interface

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Category: [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/lexicon/lex-category-solid-object-oriented-design.md)
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
An interface bundling many unrelated operations, forcing clients to depend on methods they never call.

Referenced by
[Interface Segregation Principle (ISP)](https://banes-lab.com/records/arch/interface-segregation.md)

### Feature Extension without Modification

- Kind: [capability](https://banes-lab.com/records/kind/capability.md)
- Category: [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/lexicon/lex-category-solid-object-oriented-design.md)
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
The ability to add new behavior by writing new code rather than editing existing, tested code.

Referenced by
[Open/Closed Principle (OCP)](https://banes-lab.com/records/arch/open-closed.md)

### Incompatible Override

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Category: [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/lexicon/lex-category-solid-object-oriented-design.md)
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
An override that changes a method's expected inputs or outputs, breaking the substitutability of the subtype.

Referenced by
[Liskov Substitution Principle (LSP)](https://banes-lab.com/records/arch/liskov-substitution.md)

### Interface Proliferation

- Kind: [quality-attribute](https://banes-lab.com/records/kind/quality-attribute.md)
- Category: [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/lexicon/lex-category-solid-object-oriented-design.md)
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
The degree to which splitting interfaces finely multiplies the number of small interfaces to manage.

Referenced by
[Interface Segregation Principle (ISP)](https://banes-lab.com/records/arch/interface-segregation.md)

### Narrow Specialized Behavior

- Kind: [quality-attribute](https://banes-lab.com/records/kind/quality-attribute.md)
- Category: [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/lexicon/lex-category-solid-object-oriented-design.md)
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
The degree to which honoring a base type's contract constrains a subtype from specializing its own behavior.

Referenced by
[Liskov Substitution Principle (LSP)](https://banes-lab.com/records/arch/liskov-substitution.md)

### Role-Specific Interfaces

- Kind: [constraint](https://banes-lab.com/records/kind/constraint.md)
- Category: [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/lexicon/lex-category-solid-object-oriented-design.md)
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
The requirement that interfaces be defined per client role rather than as one general-purpose surface.

Referenced by
[Interface Segregation Principle (ISP)](https://banes-lab.com/records/arch/interface-segregation.md)

### Switch-Based Extension

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Category: [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/lexicon/lex-category-solid-object-oriented-design.md)
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
Extending behavior by editing a growing switch or conditional on a type instead of adding a new polymorphic type.

Referenced by
[Open/Closed Principle (OCP)](https://banes-lab.com/records/arch/open-closed.md)

### Type Switching

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Category: [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/lexicon/lex-category-solid-object-oriented-design.md)
- Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)

Details

Definition
Branching on an object's concrete type instead of dispatching through a shared polymorphic interface.

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

## Links to

- [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- [Structural Core](https://banes-lab.com/records/layer/structural-core.md)
- [Liskov Substitution Principle (LSP)](https://banes-lab.com/records/arch/liskov-substitution.md)
- [Dependency Inversion Principle (DIP)](https://banes-lab.com/records/arch/dependency-inversion.md)
- [capability](https://banes-lab.com/records/kind/capability.md)
- [Interface Segregation Principle (ISP)](https://banes-lab.com/records/arch/interface-segregation.md)
- [constraint](https://banes-lab.com/records/kind/constraint.md)
- [Open/Closed Principle (OCP)](https://banes-lab.com/records/arch/open-closed.md)
- [quality-attribute](https://banes-lab.com/records/kind/quality-attribute.md)
- [Polymorphism](https://banes-lab.com/records/arch/polymorphism.md)
