Context-oriented programming: beyond layers
Design patterns: Abstraction and reuse of object-oriented design