# alxfdez/hw_composition_over_inheritance architecture

> Architecture diagram of the GitHub repository alxfdez/hw_composition_over_inheritance, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/alxfdez/hw_composition_over_inheritance
- Repository: https://github.com/alxfdez/hw_composition_over_inheritance

## Overview

This is a small teaching example comparing employee-pay calculations implemented through composition and inheritance. The workflow is to create employee/pay data, compute compensation, and print the result. Composition separates employees, payment contracts, and commission; inheritance uses employee subclasses, including commission variants. The README identifies the assignment but documents no further capabilities; several class implementations were not sampled, so their internal behavior is not detailed.

Main entry points: [`Composition/main.py`](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Composition/main.py) (Composition Demo), [`Inheritance/main.py`](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Inheritance/main.py) (Inheritance Demo), [`Composition/Contract.py`](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Composition/Contract.py) (Contract), [`Composition/Employee.py`](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Composition/Employee.py) (Employee)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_composition["Composition Model"]
  node_composition_main["Composition Demo<br/>[main.py]"]
  node_comp_employee["Employee<br/>[Employee.py]"]
  node_contract["Contract<br/>[Contract.py]"]
  node_hourly_contract["Hourly Contract<br/>[HourlyContract.py]"]
  node_salaried_contract["Salaried Contract"]
  node_freelancer_contract["Freelancer Contract"]
  node_commission["Commission<br/>[Commission.py]"]
  node_contract_commission["Contract Commission"]
end

subgraph group_inheritance["Inheritance Model"]
  node_inheritance_main["Inheritance Demo<br/>[main.py]"]
  node_base_employee["Employee Base<br/>[Employee.py]"]
  node_hourly_employee["Hourly Employee<br/>[HourlyEmployee.py]"]
  node_salaried_employee["Salaried Employee"]
  node_freelancer["Freelancer<br/>[Freelancer.py]"]
  node_hourly_commission["Hourly With Commission"]
  node_salaried_commission["Salaried With Commission"]
  node_freelancer_commission["Freelancer With Commission"]
end

node_user(("User"))
node_console(("Console"))

node_user -->|"runs"| node_composition_main
node_composition_main -->|"creates"| node_hourly_contract
node_composition_main -->|"creates; computes pay"| node_comp_employee
node_composition_main -->|"creates"| node_salaried_contract
node_composition_main -->|"creates"| node_contract_commission
node_comp_employee -->|"calls payment"| node_contract
node_comp_employee -->|"calls payment"| node_commission
node_hourly_contract -->|"extends"| node_contract
node_salaried_contract -->|"extends"| node_contract
node_freelancer_contract -->|"extends"| node_contract
node_contract_commission -->|"extends"| node_commission
node_composition_main -->|"prints results"| node_console
node_user -->|"runs"| node_inheritance_main
node_inheritance_main -->|"creates; computes pay"| node_hourly_employee
node_inheritance_main -->|"creates; computes pay"| node_salaried_commission
node_inheritance_main -->|"prints results"| node_console
node_hourly_employee -->|"extends"| node_base_employee
node_salaried_employee -->|"extends"| node_base_employee
node_freelancer -->|"extends"| node_base_employee
node_hourly_commission -->|"extends; calls parent pay"| node_hourly_employee
node_salaried_commission -->|"extends; calls parent pay"| node_salaried_employee
node_freelancer_commission -->|"extends; calls parent pay"| node_freelancer

click node_composition_main "https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Composition/main.py"
click node_comp_employee "https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Composition/Employee.py"
click node_contract "https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Composition/Contract.py"
click node_hourly_contract "https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Composition/HourlyContract.py"
click node_salaried_contract "https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Composition/SalariedContract.py"
click node_freelancer_contract "https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Composition/FreelancerContract.py"
click node_commission "https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Composition/Commission.py"
click node_contract_commission "https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Composition/ContractComission.py"
click node_inheritance_main "https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Inheritance/main.py"
click node_base_employee "https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Inheritance/Employee.py"
click node_hourly_employee "https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Inheritance/HourlyEmployee.py"
click node_salaried_employee "https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Inheritance/SalariedEmployee.py"
click node_freelancer "https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Inheritance/Freelancer.py"
click node_hourly_commission "https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Inheritance/withCommission/HourlyEmployeeWithCommission.py"
click node_salaried_commission "https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Inheritance/withCommission/SalariedEmployeeWithCommission.py"
click node_freelancer_commission "https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Inheritance/withCommission/FreelancerWithCommission.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_composition_main,node_comp_employee,node_contract,node_hourly_contract,node_salaried_contract,node_freelancer_contract,node_commission,node_contract_commission,node_user toneBlue
class node_inheritance_main,node_base_employee,node_hourly_employee,node_salaried_employee,node_freelancer,node_hourly_commission,node_salaried_commission,node_freelancer_commission toneAmber
class node_console toneIndigo
```

## Components

### Composition Model

- [Composition Demo](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Composition/main.py): `Composition/main.py`
- [Employee](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Composition/Employee.py): `Composition/Employee.py`
- [Contract](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Composition/Contract.py): `Composition/Contract.py`
- [Hourly Contract](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Composition/HourlyContract.py): `Composition/HourlyContract.py`
- [Salaried Contract](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Composition/SalariedContract.py): `Composition/SalariedContract.py`
- [Freelancer Contract](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Composition/FreelancerContract.py): `Composition/FreelancerContract.py`
- [Commission](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Composition/Commission.py): `Composition/Commission.py`
- [Contract Commission](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Composition/ContractComission.py): `Composition/ContractComission.py`

### Inheritance Model

- [Inheritance Demo](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Inheritance/main.py): `Inheritance/main.py`
- [Employee Base](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Inheritance/Employee.py): `Inheritance/Employee.py`
- [Hourly Employee](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Inheritance/HourlyEmployee.py): `Inheritance/HourlyEmployee.py`
- [Salaried Employee](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Inheritance/SalariedEmployee.py): `Inheritance/SalariedEmployee.py`
- [Freelancer](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Inheritance/Freelancer.py): `Inheritance/Freelancer.py`
- [Hourly With Commission](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Inheritance/withCommission/HourlyEmployeeWithCommission.py): `Inheritance/withCommission/HourlyEmployeeWithCommission.py`
- [Salaried With Commission](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Inheritance/withCommission/SalariedEmployeeWithCommission.py): `Inheritance/withCommission/SalariedEmployeeWithCommission.py`
- [Freelancer With Commission](https://github.com/alxfdez/hw_composition_over_inheritance/blob/main/Inheritance/withCommission/FreelancerWithCommission.py): `Inheritance/withCommission/FreelancerWithCommission.py`

### Other components

- **User**
- **Console**

## Connections

- User → Composition Demo: runs
- Composition Demo → Hourly Contract: creates
- Composition Demo → Employee: creates; computes pay
- Composition Demo → Salaried Contract: creates
- Composition Demo → Contract Commission: creates
- Employee → Contract: calls payment
- Employee → Commission: calls payment
- Hourly Contract → Contract: extends
- Salaried Contract → Contract: extends
- Freelancer Contract → Contract: extends
- Contract Commission → Commission: extends
- Composition Demo → Console: prints results
- User → Inheritance Demo: runs
- Inheritance Demo → Hourly Employee: creates; computes pay
- Inheritance Demo → Salaried With Commission: creates; computes pay
- Inheritance Demo → Console: prints results
- Hourly Employee → Employee Base: extends
- Salaried Employee → Employee Base: extends
- Freelancer → Employee Base: extends
- Hourly With Commission → Hourly Employee: extends; calls parent pay
- Salaried With Commission → Salaried Employee: extends; calls parent pay
- Freelancer With Commission → Freelancer: extends; calls parent pay
