IMPLEMENTATION STRATEGIES FOR DEVELOPING MIDDLEWARE-BASED DISTRIBUTED DEPENDABLE APPLICATIONS