Program slicing, a program reduction technique, identifies codes that are related to a given function or variable of interest in a given program. It fulfills the task of decomposing and filtering a large program to restrict the focus to some specific parts. Program slicing has applications in software maintenance, reverse engineering, testing, and debugging. Program slicing can be mainly classified into static slicing and dynamic slicing. In this thesis, we introduce a new forward slicing approach for computing dynamic slices for OO programs. Our algorithm computes dynamically slices for all program components executed at run-time, without requiring any major recording of the program execution trace. We also propose an optimized algorithm as a solution to compute slices in the presents of exception handling in OO programs. The presented algorithm addresses additional issues related to the elimination of the notion of TopSlices from the based algorithm. Instead, our algorithm applies a registration strategy for slice computation, so that reduces the run-time storage overhead.