27,268 research outputs found

    ModPascal report

    Get PDF
    The object oriented programming language ModPascal and its programming environment are introduced. ModPascal extends Standard Pascal by constructs that have shown usefullness in abstract data type- theory: module types, enrichments, instantiations and instantiate types. In fact, ModPascal has been designed as procedural counterpart of a specification language based on abstract data types; and its semantics also employs algebraic structures. ModPascal programs may be edited, compiled and executed by using the ModPascal Programming System that includes a multi-user data base for ModPascal objects

    A Technique for Distributed Systems Specification

    Get PDF
    In this paper we show how an object-oriented specification language is usefvl for the specification of distributed systems. The main constructors in this language are the objects. An object consists of a state, a behaviour and a set of transition rules between states. The specification is composed by three sections: definition of algebraic data types to represent the domain of object attributes, definition of classes that group objects with common features, and definition of relationships among classes. We show two possible styles for defining the behaviour of objects, in one hand we use a transition system (state oriented) and in the other hand we use an algebraic model of processes description (constraint oriented). We illustrate the paper with the specification of the dining philosophers problem, a typical example in distributed programming

    Algorithmic Abstraction Via Polymorphism In Object-oriented Programming Languages

    Get PDF
    The abstraction gap between algorithms and functions (procedures) causes numerous duplicate efforts in implementing the same algorithms as well as apparent under-use of many efficient algorithms. A solution to this problem is to realize algorithmic abstraction at the programming language level in addition to data abstraction. For this purpose, a programming language needs to have (1) an adequate type hierarchy for defining the domains of algorithms and (2) proper constructs for writing the sequences of steps of algorithms that are polymorphic to all types of objects in an algorithm domain.;Many object-oriented programming languages use a two-level hierarchy of entities (objects and classes) to support data abstraction. This hierarchy is only adequate to support two forms of polymorphism: universal-bounded polymorphism and inclusion-bounded polymorphism. Neither of them is proper for algorithmic abstraction.;The main aim of this thesis is to develop an adequate type structure and proper forms of polymorphism for algorithmic abstraction in object-oriented programming languages. We define a four-level hierarchy of entities: objects, classes, types, and kinds. Objects and classes have ordinary meanings; a type is a set of classes that have exactly the same external behaviour; and a kind is a set of types that share common properties. Based on the type hierarchy, we establish various forms of polymorphism which allow us to write polymorphic functions at different abstraction levels. We show that kinds are at the proper abstraction level for defining the domains of algorithms, and that kind-bounded polymorphic functions are algorithms which we propose to be supported at the programming language level.;Another goal of this thesis is to develop an object-oriented algebraic theory for the semantics of the four-level type hierarchy. In our approach, a kind corresponds to a structured signature which can have other signatures as its sorts. Thus, any algebra of a structured signature is a structured algebra which can have other algebras as its domains. We show that a structured algebra fits naturally into the structure of a class

    The C++0x "Concepts" Effort

    Full text link
    C++0x is the working title for the revision of the ISO standard of the C++ programming language that was originally planned for release in 2009 but that was delayed to 2011. The largest language extension in C++0x was "concepts", that is, a collection of features for constraining template parameters. In September of 2008, the C++ standards committee voted the concepts extension into C++0x, but then in July of 2009, the committee voted the concepts extension back out of C++0x. This article is my account of the technical challenges and debates within the "concepts" effort in the years 2003 to 2009. To provide some background, the article also describes the design space for constrained parametric polymorphism, or what is colloquially know as constrained generics. While this article is meant to be generally accessible, the writing is aimed toward readers with background in functional programming and programming language theory. This article grew out of a lecture at the Spring School on Generic and Indexed Programming at the University of Oxford, March 2010

    JWalk: a tool for lazy, systematic testing of java classes by design introspection and user interaction

    Get PDF
    Popular software testing tools, such as JUnit, allow frequent retesting of modified code; yet the manually created test scripts are often seriously incomplete. A unit-testing tool called JWalk has therefore been developed to address the need for systematic unit testing within the context of agile methods. The tool operates directly on the compiled code for Java classes and uses a new lazy method for inducing the changing design of a class on the fly. This is achieved partly through introspection, using Java’s reflection capability, and partly through interaction with the user, constructing and saving test oracles on the fly. Predictive rules reduce the number of oracle values that must be confirmed by the tester. Without human intervention, JWalk performs bounded exhaustive exploration of the class’s method protocols and may be directed to explore the space of algebraic constructions, or the intended design state-space of the tested class. With some human interaction, JWalk performs up to the equivalent of fully automated state-based testing, from a specification that was acquired incrementally

    Session Types in Concurrent Calculi: Higher-Order Processes and Objects

    No full text
    This dissertation investigates different formalisms, in the form of programming language calculi, that are aimed at providing a theoretical foundation for structured concurrent programming based on session types. The structure of a session type is essentially a process-algebraic style description of the behaviour of a single program identifier serving as a communication medium (and usually referred to as a channel): the types incorporate typed inputs, outputs, and choices which can be composed to form larger protocol descriptions. The effectiveness of session typing can be attributed to the linear treatment of channels and session types, and to the use of tractable methods such as syntactic duality to decide if the types of two connected channels are compatible. Linearity is ensured when accumulating the uses of a channel into a composite type that describes also the order of those actions. Duality provides a tractable and intuitive method for deciding when two connected channels can interact and exchange values in a statically determined type-safe way. We present our contributions to the theory of sessions, distilled into two families of programming calculi, the first based on higher-order processes and the second based on objects. Our work unifies, improves and extends, in manifold ways, the session primitives and typing systems for the Lambda-calculus, the Pi-calculus, the Object-calculus, and their combinations in multi-paradigm languages. Of particular interest are: the treatment of infinite interactions expressed with recursive sessions; the capacity to encapsulate channels in higher-order structures which can be exchanged and kept suspended, i.e., the use of code as data; the integration of protocol structure directly into the description of objects, providing a powerful and uniformly extensible set of implementation abstractions; finally, the introduction of asynchronous subtyping, which enables controlled reordering of actions on either side of a session. Our work on higher-order processes and on object calculi for session-based concurrent programming provides a theoretical foundation for programming language design integrating functional, process, and object-oriented features

    Modal logics for reasoning about object-based component composition

    Get PDF
    Component-oriented development of software supports the adaptability and maintainability of large systems, in particular if requirements change over time and parts of a system have to be modified or replaced. The software architecture in such systems can be described by components and their composition. In order to describe larger architectures, the composition concept becomes crucial. We will present a formal framework for component composition for object-based software development. The deployment of modal logics for defining components and component composition will allow us to reason about and prove properties of components and compositions
    • 

    corecore