Unified Modeling Language (UML) integrated other modeling languages in mid 1990s
UML allows software engineers to perform analysis and design in a consistent format
Analysis tends to be classes and relationships between classes
Design tends to be objects with attributes and methods
Preliminary design consists of architectural features including inheritance and assembly
Detailed design is one step away from programming, using collaboration/sequence diagrams
UML allows for a systematic presentation of ``design patterns''
Design patterns are reusable software architectures that solve recurring problems
No need to reinvent the wheel
Example Problem: How to port application software to new platforms without modifications?
Solution: The Abstract Factory Pattern
This course introduces UML and Design Patterns, with implementations in Java