Jenže pokud budete přistupovat k rozhraním takto, tak pro každou speciální věc budete muset navrhovat nové rozhraní. Jinými slovy, navržená rozhraní nebudou reusabilní.
V podstatě to, co tvrdím je, že rozhraní je tím více reusabilní, čím více odpovídá tomu, co objekt ve skutečnosti je či jaké má objekt ve skutečnosti schopnosti. (viz to rozdělení dvou typů rozhraní níže).
To ale v podstatě znamená, že dobře navržené rozhraní není jen komunikační protokol, ale vypovídá o vlastnostech samotného objektu.
Problém, na který narážíte s kovářem je ten, že dvě aplikace budou chápat pojem kovář jinak, pro jednoho je to ten, co kupuje železo, pro druhého je to ten, co do něj buší. To jsou ve skutečnosti ale dvě naprosto nesouvisející rozhraní. Tady se opravdu shoduje pouze slovo (identifikátor) a nikoli pojem.
Pokud by ale byly dvě aplikace, které obě potřebují bušiče do železa, tak doufám souhlasíte, že je ideálním stavem, když se podaří navrhnout rozhraní kováře tak, aby obě používali to samé.
----
Když bych to parafrázoval ještě z jiné strany: když si chci s někým porozumět, tak mi nestačí vědět, jaká používá slova, ale co ty jeho slova opravdu znamenají. Tzn. nestačí mi vědět, že mluví anglicky, ale musím znát jeho osobnost.
Pokud rozhraní specifikuje pouze komunikační protokol, tak znám pouze jazyk, takže nevím, jestli to co řeknu urazí, nebo poctí. Když znám i osobnost člověka, se kterým se bavím, tak se mi to nestane. Proto tvrdím, že rozhraní by mělo s sebou nést nikoli jen to, jak daný člověk mluví, ale i kdo je.
-----
Ad IButtonAction je rozhraní, které podle mne zhruba říká: objekt nesoucí toto rozhraní může přijmout pokyn k akci. V tu chvíli mu vyhoví jak tlačítko, tak i formulář. A sem v pohodě :-). Jelikož existuje spousta objektů, které v sobě inherentně obsahují možnost reagovat právě na jednu akci, tak je to rozhraní dobře navrženo. (Narozdíl od myslivce, kdy žádný myslivec v sobě inherentně neobsahuje vlastnost mít právě jednoho psa).