Software Design Methodology From Principles To Architectural Styles 2005