“…An obstacle in maintaining the desired relationship between a software system's architecture and its implementation is that the two rely on different abstractions (Malek et al, 2005b;Malek et al, 2006). Architects often design their systems using high-level constructs (e.g., components, connectors, ports), while programmers implement those abstract constructs using low-level programming language constructs (e.g., pointers, arrays, classes, variables).…”