Object-Oriented Software Fault Tolerance: Framework, reuse and design diversity