• Publications
  • Influence
Open Modules: Modular Reasoning About Advice
Advice is a mechanism used by advanced object-oriented and aspect-oriented programming languages to augment the behavior of methods in a program. Advice can help to make programs more modular byExpand
  • 263
  • 36
Ownership Domains: Separating Aliasing Policy from Mechanism
Ownership types promise to provide a practical mechanism for enforcing stronger encapsulation by controlling aliasing in object-oriented languages. However, previous ownership type proposals haveExpand
  • 209
  • 34
Alias annotations for program understanding
One of the primary challenges in building and evolving large object-oriented systems is understanding aliasing between objects. Unexpected aliasing can lead to broken invariants, mistakenExpand
  • 255
  • 31
Modular typestate checking of aliased objects
Objects often define usage protocols that clients must follow inorder for these objects to work properly. Aliasing makes itnotoriously difficult to check whether clients and implementations areExpand
  • 193
  • 23
ArchJava: connecting software architecture to implementation
Software architecture describes the structure of a system, enabling more effective design, program understanding, and formal analysis. However, existing approaches decouple implementation code fromExpand
  • 335
  • 16
Architectural Reasoning in ArchJava
Software architecture describes the structure of a system, enabling more effective design, program understanding, and formal analysis. However, existing approaches decouple implementation code fromExpand
  • 143
  • 15
Static extraction and conformance analysis of hierarchical runtime architectural structure using annotations
An object diagram makes explicit the object structures that are only implicit in a class diagram. An object diagram may be missing and must extracted from the code. Alternatively, an existing diagramExpand
  • 61
  • 10
Discovering Architectures from Running Systems
One of the challenging problems for software developers is guaranteeing that a system as built is consistent with its architectural design. In this paper, we describe a technique that uses runtimeExpand
  • 119
  • 9
Typestate-oriented programming
Objects model the world, and state is fundamental to a faithful modeling. Engineers use state machines to understand and reason about state transitions, but programming languages provide littleExpand
  • 110
  • 9
First-class state change in plaid
Objects model the world, and state is fundamental to a faithful modeling. Engineers use state machines to understand and reason about state transitions, but programming languages provide littleExpand
  • 74
  • 9