Main Pagehttp:/pg-server.csc.ncsu.edu/mediawiki/index.php/CSC/ECE 517 Fall 2009/wiki2 7 cn
Problem Statement
Different languages have different mechanisms for "code reuse". Assembly and low level languages have macros, C/C++ has includes, Ruby has mixins and modules, Java has packages, and there are many other concepts around reuse and extension. Here is a page that describes the various mechanisms, groups the mechanisms into logical categories, and discusses the advantages and disadvantages of the various schemes, in terms of simplicity, performance, reliability, or other factors.
A Brief Overview of Code Reuse
Code reuse, also called software reuse, is the use of existing software, or software knowledge, to build new software.Code reuse is the idea that a partial or complete computer program written at one time can be, should be, or is being used in another program written at a later time. The reuse of programming code is a common technique which attempts to save time and energy by reducing redundant work.The software library is a good example of code reuse. Programmers may decide to create internal abstractions so that certain parts of their program can be reused, or may create custom libraries for their own use. The following sections elaborate more on code reuse.
Code Reuse is not Duplication
Duplicating code is the result of a copy-paste scenario. The moment you’ve copy-pasted a module of code to two locations in your application you’ve just created an additional maintenance point. Also if you have coded a bug into the code that is being duplicated, that bug instantiates itself in every place you pasted it.Reuse is different from duplication.In code reuse you relocate the logic or work that a module does in multiple areas of the application to one place. The code doesn’t have to physically reside in all of those places to get reused.
Interfaces
Reuse is not always functional code that needs to be applied in more than one place. It can be obtained through the use of interfaces and generics as well. By using a solid interface design to allow any type of object with a compatible set of methods to be used in a piece of your application, you allow for everything on both sides of that interface to be easily interchangeable.Other type of interface-like methods that promote architectural reuse are generics, tag libraries, and dozens of frameworks out there that allow pieces to be easily decoupled and injected into the application.
The following section will discuss code reuse in different languages such as C, C++, Java & Ruby.
Conclusion
In the end, reuse is definitely more than the literal meaning of the term. It most certainly implies more than just a quick copy-paste job against other modules. There’s even more to it than simply putting the code in a commonly accessible method, though that’s usually enough for most scenarios.
References
http://www.refactoring.com
Refactoring: Improving the Design of Existing Code by Martin Fowler.