Functional Programming, Protocol Oriented, Value Oriented, Generic Protocols, Object Oriented, Swift 4