This course gives a wide perspective on software patterns and their
relation to frameworks. The focus is on the theory and practice of
software patterns, and will include in-depth studies of many forms of
patterns, not just design patterns.
Patterns are descriptions of abstract solutions to often recurring
problems in programming. The idea originally came from architecture
(for buildings) and the name is chosen because the solutions, since
they are used often, occur as patterns in the design. Design patterns
are the most widely known kind of patterns, and are a topic in the
course, but we will also cover patterns for software architecture,
concurrency, distribution, analysis, and organization.