Using prototypical objects to implement shared behavior in object-oriented systems
OOPLSA '86 Conference proceedings on Object-oriented programming systems, languages and applications
A simple technique for handling multiple polymorphism
OOPLSA '86 Conference proceedings on Object-oriented programming systems, languages and applications
OOPSLA '87 Conference proceedings on Object-oriented programming systems, languages and applications
OOPSLA '87 Conference proceedings on Object-oriented programming systems, languages and applications
OOPSLA/ECOOP '90 Proceedings of the European conference on object-oriented programming on Object-oriented programming systems, languages, and applications
Object-oriented type inference
OOPSLA '91 Conference proceedings on Object-oriented programming systems, languages, and applications
Inheritance modeled with explicit bindings: an approach to typed inheritance
OOPSLA '93 Proceedings of the eighth annual conference on Object-oriented programming systems, languages, and applications
Refactoring object-oriented frameworks
Refactoring object-oriented frameworks
Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
Modular reasoning in the presence of subclassing
Proceedings of the tenth annual conference on Object-oriented programming systems, languages, and applications
Object-oriented application frameworks
Communications of the ACM
Refactoring: improving the design of existing code
Refactoring: improving the design of existing code
Types and programming languages
Types and programming languages
The Java Language Specification
The Java Language Specification
A Study of The Fragile Base Class Problem
ECCOP '98 Proceedings of the 12th European Conference on Object-Oriented Programming
Analysis of Overridden Methods to Infer Hot Spots
ECOOP '98 Workshop ion on Object-Oriented Technology
Proceedings of the First JSSST International Symposium on Object Technologies for Advanced Software
Refactoring for generalization using type constraints
OOPSLA '03 Proceedings of the 18th annual ACM SIGPLAN conference on Object-oriented programing, systems, languages, and applications
Refactoring class hierarchies with KABA
OOPSLA '04 Proceedings of the 19th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Formalizing refactorings with graph transformations: Research Articles
Journal of Software Maintenance and Evolution: Research and Practice
Traits: A mechanism for fine-grained reuse
ACM Transactions on Programming Languages and Systems (TOPLAS)
Refactoring for Parameterizing Java Classes
ICSE '07 Proceedings of the 29th international conference on Software Engineering
Efficiently refactoring java applications to use generic libraries
ECOOP'05 Proceedings of the 19th European conference on Object-Oriented Programming
Refactoring using type constraints
SAS'07 Proceedings of the 14th international conference on Static Analysis
Code generation to support static and dynamic composition of software product lines
GPCE '08 Proceedings of the 7th international conference on Generative programming and component engineering
Software Engineering for Ensembles
Software-Intensive Systems and New Computing Paradigms
Genoa Proceedings of the 23rd European Conference on ECOOP 2009 --- Object-Oriented Programming
From Public to Private to Absent: Refactoring Java Programs under Constrained Accessibility
Genoa Proceedings of the 23rd European Conference on ECOOP 2009 --- Object-Oriented Programming
From behaviour preservation to behaviour modification: constraint-based mutant generation
Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 1
Specifying and implementing refactorings
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Correct refactoring of concurrent java code
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
Demystifying object schizophrenia
Proceedings of the 4th Workshop on MechAnisms for SPEcialization, Generalization and inHerItance
Multi-dimensional variability modeling
Proceedings of the 5th Workshop on Variability Modeling of Software-Intensive Systems
Refactoring Java programs for flexible locking
Proceedings of the 33rd International Conference on Software Engineering
Refactoring pipe-like mashups for end-user programmers
Proceedings of the 33rd International Conference on Software Engineering
Proceedings of the 33rd International Conference on Software Engineering
A refactoring constraint language and its application to eiffel
Proceedings of the 25th European conference on Object-oriented programming
Patterns of memory inefficiency
Proceedings of the 25th European conference on Object-oriented programming
Issues arising from refactoring studies: an experience report
ACM SIGSOFT Software Engineering Notes
Build code analysis with symbolic evaluation
Proceedings of the 34th International Conference on Software Engineering
Constraint-Based refactoring with foresight
ECOOP'12 Proceedings of the 26th European conference on Object-Oriented Programming
Identification of generalization refactoring opportunities
Automated Software Engineering
Hi-index | 0.00 |
Because of the strong coupling of classes and the proliferation of unneeded class members induced by inheritance, the suggestion to use composition and delegation instead has become commonplace. The presentation of a corresponding refactoring in the literature may lead one to believe that such a transformation is a straightforward undertaking. However, closer analysis reveals that this refactoring is neither always possible, nor does it necessarily achieve its desired effect. We have therefore identified the necessary preconditions and realizable postconditions of the refactoring, and built a tool that can perform it completely automatically. By applying this tool to all subclasses of several open-source projects, we have collected evidence of the applicability of the refactoring and of its capability to deliver on its promises. The refactoring builds on constraint graphs originally developed for type inference to check the preconditions and to compute the necessary delegation as well as the subtype relationships that must be maintained.