Code duplication is a serious problem with no easy solution, even in industrial-strength code. Single inheritance cannot provide for effective code reuse in all situations, and sometimes programmers are driven to duplicate code using copy and paste. A language feature called traits enables code to be shared across the inheritance hierarchy, and claims to permit the removal of most duplication. We attempted to validate this claim in a case study of the java.io library. Detecting duplication was more complex than we had imagined, but traits were indeed able to remove all that we found. Categories and Subject Descriptors D.2.13 [Software Engineering]: Reusable Software; D.3.3 [Language Constructs and Features]: Classes, objects and inheritance. General Terms Design, Languages Keywords Refactoring, Traits, Java IO Class Libraries
Emerson R. Murphy-Hill, Philip J. Quitslund, Andre