This poster presents MonitorMethod which helps Java programmers gain insight in the behavior of their applications. MonitorMethod instruments the Java application and relates hardware performance monitors (HPMs) to th...
详细信息
ISBN:
(纸本)1581138334
This poster presents MonitorMethod which helps Java programmers gain insight in the behavior of their applications. MonitorMethod instruments the Java application and relates hardware performance monitors (HPMs) to the methods in the Java application's source code. We present a detailed case study showing that linking microprocessor-level performance characteristics to the source code is helpful for identifying performance bottlenecks and their causes. In addition, we relate our work to a previously proposed time-based HPM profiling framework.
This paper reports our experiences using traits, collections of pure methods designed to promote reuse and understandability in object-oriented programs. Traits had previously been used to refactor the Smalltalk colle...
详细信息
ISBN:
(纸本)1581138334
This paper reports our experiences using traits, collections of pure methods designed to promote reuse and understandability in object-oriented programs. Traits had previously been used to refactor the Smalltalk collection hierarchy, but only by the creators of traits themselves. This experience report represents the first independent test of these language features. Murphy-Hill implemented a substantial multi-class data structure called ropes that makes significant use of traits. We found that traits improved understandability and reduced the number of methods that needed to be written by 46%.
Inheritance is a useful mechanism for factoring and reusing code. However, it has limitations for building extensible systems. We describe nested inheritance, a mechanism that addresses some of the limitations of ordi...
详细信息
ISBN:
(纸本)1581138318
Inheritance is a useful mechanism for factoring and reusing code. However, it has limitations for building extensible systems. We describe nested inheritance, a mechanism that addresses some of the limitations of ordinary inheritance and other code reuse mechanisms. Using our experience with an extensible compiler framework, we show how nested inheritance can be used to construct highly extensible software frameworks. The essential aspects of nested inheritance are formalized in a simple object-oriented language with an operational semantics and type system. The type system of this language is sound, so no run-time type checking is required to implement it and no run-time type errors can occur. We describe our implementation of nested inheritance as an unobtrusive extension of the Java language, called Jx. Our prototype implementation translates Jx code to ordinary Java code, without duplicating inherited code.
Examples form an integral part of learning to program. In this paper we argue that the role of examples should go beyond merely illustrating concepts or principles and should "sell" concepts to new programme...
详细信息
ISBN:
(纸本)1581138334
Examples form an integral part of learning to program. In this paper we argue that the role of examples should go beyond merely illustrating concepts or principles and should "sell" concepts to new programmers. We identify four common pitfalls to avoid when designing examples for teaching programming. We show how examples that are too abstract or too complex can be harmful in explaining new concepts to students. We also show how some examples used to illustrate new concepts can undermine previously taught concepts by not applying these concepts consistently. Finally, we show how some examples can do harm by undermining the very concept they are introducing. The aim of this paper is to encourage educators to think critically about examples before using them.
This Volume 38 Number 11 of the conference proceedings contains 26 papers. Topics discussed include refactoring and reflection, smalltalkiana, error repair, generics, Java performance, language design, object-oriented...
详细信息
This Volume 38 Number 11 of the conference proceedings contains 26 papers. Topics discussed include refactoring and reflection, smalltalkiana, error repair, generics, Java performance, language design, object-orientedprogramming, garbage collection and transactions and persistence.
A simple alternative to Mockobjects is presented. Given the interface of an object required by a class-under-test, a Pseudo-Class is created implementing all methods such that they immediately fail. A test-specific su...
详细信息
ISBN:
(纸本)1581138334
A simple alternative to Mockobjects is presented. Given the interface of an object required by a class-under-test, a Pseudo-Class is created implementing all methods such that they immediately fail. A test-specific sub-class of the Pseudo-Class is created locally in the test (ex. as an anonymous inner-class in Java), over-riding only the methods required by the interaction between the object and the class-under-test for the test-scenario. Typically, the method implementations are extremely simple (a few lines, at most), and the number of methods overridden is small. This mechanism was found adequate for more than 90% of our unit-tests (in a 1000-class system with over 2000 test methods, we finally ended up with about four real Mockobject classes and more than 40 Pseudo-Classes).
A novel method for identifying dense communities of classes (clusters) within an object-oriented system has been developed. Such communities might possibly imply relevance of functionality and thus be used as Reusable...
详细信息
ISBN:
(纸本)1581138334
A novel method for identifying dense communities of classes (clusters) within an object-oriented system has been developed. Such communities might possibly imply relevance of functionality and thus be used as Reusable Components. The term "Reusable Components" is used to refer to a set of interrelated classes that represent a module that can be used in different software systems. To accomplish this identification we employ Algebraic Graph Theory (Spectral Graph Partitioning Techniques). From a modified class diagram of the software system we create a graph in which classes stand for the nodes and the discrete messages exchanged between the classes stand for the edges. Our approach is based on an iterative method for partitioning the graph in order to identify possible reusable components within the system. The eigenvectors of the Laplacian matrix derived from the graph are used for the partitioning.
In an object-oriented language, a derived class may declare a method with the same signature as a method in the base class. The meaning of the re-declaration depends on the language. Most commonly, the new declaration...
详细信息
ISBN:
(纸本)1581138318
In an object-oriented language, a derived class may declare a method with the same signature as a method in the base class. The meaning of the re-declaration depends on the language. Most commonly, the new declaration overrides the base declaration, perhaps completely replacing it, or perhaps using super to invoke the old implementation. Another possibility is that the base class always controls the method implementation, and the new declaration merely augments the method in the case that the base method calls inner. Each possibility has advantages and disadvantages. In this paper, we explain why programmers need both kinds of method redeclaration, and we present a language that integrates them. We also present a formal semantics for the new language, and we describe an implementation for MzScheme.
Code instrumentation is widely used for a range of purposes that include profiling, debugging, visualization, logging, and distributed computing. Due to their special status within the language infrastructure, the sta...
详细信息
ISBN:
(纸本)1581138318
Code instrumentation is widely used for a range of purposes that include profiling, debugging, visualization, logging, and distributed computing. Due to their special status within the language infrastructure, the standard class libraries, also known as system classes, provided by most contemporary object-orientedlanguages are difficult and sometimes impossible to instrument. If instrumented, the use of their rewritten versions within the instrumentation code is usually unavoidable. However, this is equivalent to `instrumenting the instrumentation', and thus may lead to erroneous results. Consequently, most systems avoid rewriting system classes. We present a novel instrumentation strategy that alleviates the above problems by renaming the instrumented classes. The proposed approach does not require any modifications to the language, compiler or runtime. It allows system classes to be instrumented both statically and dynamically. In fact, this is the first technique that enables dynamic instrumentation of Java system classes without modification of any runtime components. We demonstrate our approach by implementing two instrumentation-based systems: a memory profiler and a distributed runtime for Java.
Capturing the evolution of logical objects and structures in a software project is crucial to the development of a high-quality software. This research demonstration presents an object-oriented approach to managing th...
详细信息
ISBN:
(纸本)1581138334
Capturing the evolution of logical objects and structures in a software project is crucial to the development of a high-quality software. This research demonstration presents an object-oriented approach to managing the evolution of system objects at the logical level. Keys to our approach are its extensible, logical, and object-oriented system model and structure versioning framework in which types of logical objects and structures in a software system are extended from a small set of the system model's basic entities, allowing them to be versioned in a fine-grained manner and independent of the physical file structure. Changes to all logical objects and structures are captured and related to each other in a tightly connected and cohesive manner via the Molhado product versioning software configuration management (SCM) infrastructure. We also demonstrate our object-oriented SCM approach by applying it in different development paradigms such as UML-based object-oriented software development, architecture-based software development, and Web application development.
暂无评论