Just a small part of an example:
@interface Garage : NSObject
@property (strong, nonatomic, readonly) NSArray *employees;
@property (strong, nonatomic, readonly) NSArray *clients;
- (void)addEmployee:(Employee *)employee;
- (void)removeEmployee:(Employee *)employee;
- (void)insertClient:(Client *)client;
- (void)removeClient:(Client *)client;
@end
---
@interface Employee : Person
@property (atomic, readonly, getter = isFree) free;
- (void)extractVehicle:(Vehicle *)vehicle fromGarage:(Garage *)garage;
- (void)parkVehicle:(Vehicle *)vehicle inGarage:(Garage *)garage;
@end
—
@interface Client : Person
@proprty (strong, nonatomic, readonly) Vehicle *vehicle;
- (instancetype)initWithName:(NSString *)name surname:(NSString *)surname vehicle:(Vehicle *)vehicle;
@end
---
@interface Person : NSObject
@property (copy, nonatomic, readonly) NSString *name;
@property (copy, nonatomic, readonly) NSString *surname;
...
@end
—
@interface Vehicle : NSObject
etc.
@end