Create well-designed code and clean architectures for object oriented languages with focus on concepts from the GoF