Knowledge Based Software Reuse