┌──────────────────────────────┐ │Vehicle │ ├──────────────────────────────┤ ┌─────────────────────────────────┐ │{field} Year : Long │ ┌────────────────────┐ │IWorkTask │ │{field} Make : String │ │VehiclePart │ ├─────────────────────────────────┤ │{field} Model : String │ ├────────────────────┤ │{method} getCostForHonda(CRV c); │ │{field} Odometer : Long │ │{field} cost: Double│ │{method} getPartsForHonda(CRV h);│ │ │ └────────────────────┘ └─────────────────────────────────┘ │{abstract} accept(IWorkTask t)│ | └──────────────────────────────┘ | | | | | ┌──────────────────────────────┐ ┌─────────────────────────────────┐ ┌─────────────────────────────────┐ ┌─────────────────────────────────┐ │Honda │ ┌─────────┐ ┌────────────┐ │OilChange │ │TireRotation │ │AirFilterChange │ ├──────────────────────────────┤ │AirFilter│ │SyntheticOil│ ├─────────────────────────────────┤ ├─────────────────────────────────┤ ├─────────────────────────────────┤ │{field} Make: String = "Honda"│ ├─────────┤ ├────────────┤ │{method} getCostForHonda(CRV c); │ │{method} getCostForHonda(CRV c); │ │{method} getCostForHonda(CRV c); │ └──────────────────────────────┘ └─────────┘ └────────────┘ │{method} getPartsForHonda(CRV h);│ │{method} getPartsForHonda(CRV h);│ │{method} getPartsForHonda(CRV h);│ | | └─────────────────────────────────┘ └─────────────────────────────────┘ └─────────────────────────────────┘ | | ┌─────────────────────────────────┐ | │CRV │ ┌─────────────────┐ ├─────────────────────────────────┤ │HondaCrvAirFilter│ │{method} void accept(IWorkTask t)│ ├─────────────────┤ └─────────────────────────────────┘ └─────────────────┘