Abstraction and specification in program development
Abstraction and specification in program development
POPL '90 Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Reasoning about object-oriented programs that use subtypes
OOPSLA/ECOOP '90 Proceedings of the European conference on object-oriented programming on Object-oriented programming systems, languages, and applications
Reuse (panel): truth or fiction
OOPSLA '92 conference proceedings on Object-oriented programming systems, languages, and applications
Issues in the design and specification of class libraries
OOPSLA '92 conference proceedings on Object-oriented programming systems, languages, and applications
Larch: languages and tools for formal specification
Larch: languages and tools for formal specification
Safe type checking in a statically-typed object-oriented programming language
POPL '93 Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Specifications and their use in defining subtypes
OOPSLA '93 Proceedings of the eighth annual conference on Object-oriented programming systems, languages, and applications
Typing the specialization interface
OOPSLA '93 Proceedings of the eighth annual conference on Object-oriented programming systems, languages, and applications
A behavioral notion of subtyping
ACM Transactions on Programming Languages and Systems (TOPLAS)
Taligent's Guide to Designing Programs: Well-Mannered Object-Oriented Design in C++
Taligent's Guide to Designing Programs: Well-Mannered Object-Oriented Design in C++
Verifiable Programming
ECOOP '94 Proceedings of the 8th European Conference on Object-Oriented Programming
Designing an Object-Oriented Programming Language with Behavioural Subtyping
Proceedings of the REX School/Workshop on Foundations of Object-Oriented Languages
Reuse contracts: managing the evolution of reusable assets
Proceedings of the 11th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Representation Inheritance: A Safe Form of "White Box" Code Inheritance
IEEE Transactions on Software Engineering
Maintaining the consistency of class libraries during their evolution
Proceedings of the 12th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
An inheritance-based technique for building simulation proofs incrementally
Proceedings of the 22nd international conference on Software engineering
An Automatic Class Generation Mechanism by Using Method Integration
IEEE Transactions on Software Engineering
Documenting framework behavior
ACM Computing Surveys (CSUR)
Safely creating correct subclasses without seeing superclass code
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
An inheritance-based technique for building simulation proofs incrementally
ACM Transactions on Software Engineering and Methodology (TOSEM)
Fostering component evolution with C# attributes
Proceedings of the International Workshop on Principles of Software Evolution
Towards Specifying Constraints for Object-Oriented Frameworks
Information Systems Frontiers
Behavioral Compatibility of Self-Typed Theories
ECOOP '02 Proceedings of the 16th European Conference on Object-Oriented Programming
Compositional Proofs for Concurrent Objects
COMPOS'97 Revised Lectures from the International Symposium on Compositionality: The Significant Difference
Towards specifying constraints for object-oriented frameworks
CASCON '01 Proceedings of the 2001 conference of the Centre for Advanced Studies on Collaborative research
Inheriting and Modifying Behavior
TOOLS '97 Proceedings of the Tools-23: Technology of Object-Oriented Languages and Systems
Detecting Evolution Incompatibilities by Analyzing Java Binaries
TOOLS '99 Proceedings of the Technology of Object-Oriented Languages and Systems
Inheritance: From Code Reuse to Reasoning Reuse
ICSR '98 Proceedings of the 5th International Conference on Software Reuse
Information Hiding and Visibility in Interface Specifications
ICSE '07 Proceedings of the 29th international conference on Software Engineering
Granularity in software product lines
Proceedings of the 30th international conference on Software engineering
Systematically refactoring inheritance to delegation in java
Proceedings of the 30th international conference on Software engineering
EffectiveAdvice: disciplined advice with explicit effects
Proceedings of the 9th International Conference on Aspect-Oriented Software Development
Revisiting information hiding: reflections on classical and nonclassical modularity
Proceedings of the 25th European conference on Object-oriented programming
Lessons learned in applying formal concept analysis to reverse engineering
ICFCA'05 Proceedings of the Third international conference on Formal Concept Analysis
A higher abstraction level using first-class inheritance relations
ECOOP'07 Proceedings of the 21st European conference on Object-Oriented Programming
Hi-index | 0.00 |
Considerable progress has been made in understanding how to use subtyping in a way that facilitates modular reasoning. However, using subclassing in a way that facilitates modular reasoning is not well understood. Often methods must be overriden as a group because of dependencies on instance variables, and the programmers of subclasses cannot tell which methods are grouped without looking at the code of superclasses. Also, the programmers of subclasses must look at the code of superclasses to tell what assumptions inherited methods make about the behavior of overriden methods.We present a systematic way to use subclassing that facilitates formal and informal modular reasoning. Separate specifications are given to programmers writing code that manipulates instances of a class and to programmers writing subclasses of the class. The specifications given to programmers of subclasses are divided, by division of labor specifications, into multiple parts. Subclasses may inherit or override entire parts, but not sub-parts. Reasoning about the implementation of each part is done independently of other parts.