COP 2021: Proceedings of the 13th ACM International Workshop on Context-Oriented Programming and Advanced Modularity

Full Citation in the ACM Digital Library


Resolving synchronization conflicts in role-based multimodel-synchronization environments

The ability to collaboratively edit data in distributed environments is essential in our information-based industry. Typically users or systems concurrently access and modify data from different locations for different purposes. Each purpose might require its own representation and subset of the shared data (i.e., a model), for the editor to be productive. Consequently, a multi-model system results, which requires multi-directional synchronization. Although some approaches exist to realize such systems, none of these supports concurrent modifications. To overcome this limitation, we extend previous work on role-oriented model synchronization with a novel conflict detection and resolution approach. Role-oriented programming has been shown to be an adequate paradigm to realize multi-model systems, as it offers separation of concerns at the level of object collaborations and allows to express context-dependent behavior. We evaluate our approach using an employee data management case study and assess the introduced performance overhead.

First-class concepts: reifying architectural knowledge beyond the dominant decomposition

In software engineering, programs are ideally partitioned into independently maintainable and understandable modules. As a system grows, its architecture gradually loses the capability to modularly accommodate new concepts. While refactoring is expensive and the language might lack appropriate primary language constructs to express certain cross-cutting concerns, programmers are still able to explain and delineate convoluted concepts through secondary means: code comments, use of whitespace and arrangement of code, documentation, or communicating tacit knowledge.

Secondary constructs are easy to change and provide high flexibility in communicating cross-cutting concerns and other concepts among programmers. However, they have no reified representation that can be explored and maintained through tools.

In this exploratory work, we discuss novel ways to express a wide range of concepts, including cross-cutting concerns, patterns, and lifecycle artifacts independently of the dominant decomposition imposed by an existing architecture. Our concepts are first-class objects inside the programming environment that retain the capability to change as easily as code comments. We explore new tools that allow programmers to view and change programs from conceptual perspectives rather than scattering their attention across existing modules.

Our designs are geared towards facilitating multiple secondary perspectives on a system to co-exist alongside the original architecture, hence making it easier to explore, understand, and explain complex contexts and narratives not expressible in traditional modularity constructs.

Towards a framework for analyzing context-oriented programming languages

Context-aware systems keep on emerging in all of our daily activities. To cope with this new situation, programming languages were extended to support the notion of context. Although context-oriented programming languages exist for over 15 years, they were tested for their suitability in developing context-aware systems only to a limited extent. In this paper, we propose a framework for analyzing context-oriented languages from that viewpoint. In this framework, we refer to context definition and activation, reasoning capabilities, process aspects of how to work with the suggested extension, and pragmatic considerations. To demonstrate the use of the framework, we applied it to a relatively new context-oriented programming paradigm, namely context-oriented behavioral programming. The proposed framework can support users of context-oriented programming languages in deciding on the most fitted language for their purpose. Developers of context-oriented programming languages can also use the framework to improve such languages and their supporting tools.