Object-Oriented Software Engineering Practical Software Development using UML and Java Chapitre 9: Architecting and Designing Software.