>>95
Javaなら抽象クラスはAbstract〜担ってる場合が多い。
インタフェースに一番スッキリした名前を与えて、

public interface Map
public abstract class AbstractMap implements Map
public class HashMap extends AbstractMap

みたいな関係になってるのをよく見る。

Base <-> Impl とか、IFoo <-> FooImpl
みたいな窮屈な関係じゃない。
そんな一対一の関係が出てくるのは不自然だと思う。
インタフェースは特定の実装型を想定しないし、
実装型も、ひとつのインタフェースに固執してしまったり、
一つのインタフェースを実装するだけで十分だったりはしないだろう。