My research is focused on the problem of providing a conceptually robust framework for software engineering. A major goal is increased productivity in software development and maintenance, and this in turn, depends on finding a suitable programming language mechanism to support the widespread reuse of software components. Available mechanisms such as the procedure mechanism in early languages, the class concept in Smalltalk, and the generic packages in Ada, for example, have proved inadequate to the task.
If a reusability support mechanism is to be effective, it must make as easy as possible the creation of reusable components which are fully functionally specified, permit efficient implementations, admit alternative implementations when performance tradeoffs are an issue, and support the verification of the correctness of their implementation. I am currently refining such a mechanism using as a test bed a collection of modules derived from a traditional algorithms and data structures course, and this project has led to a number of surprising insights into what were considered well understood subjects.
For example, it is now clear that for the sake of efficiency, a programming language that supports large, complex user-defined objects should provide a swap operator (:=:) in place of the traditional assignment operator (:= ). The project has also developed important insights into the module design criteria. One is that modules should provide large operations such as "sort" only as secondary operations while the primary operations should be small ones such as "insert-item" and "remove-a-smallest-item."
B. Weide, W. Ogden, and S. Zweben, "Reusable Software Components," Advances in Computers, ed., M. Yovits, Academic Press, 1991, pp. 1-65.
W. Ogden, J. Rockford, and K. Winklmann, "An Interchange Lemma for Context-Free Languages," SIAM Journal of Computing, Vol. 14, No. 2, May 1985.
B. Weide, W. Odgen, "Recasting Algorithms to Encourage Reuse," IEEE Software, Sept. 94, pp. 80-88.