Design Pattern Inference for Object Oriented Systems