インタフェース。。メインルーチンなど、呼び出し側のロジックを共通化しやすくするための仕組み。引数と返却値を定義して実現する。
アブストラクト。。呼び出される側の内部処理を共通化しやすくするための仕組み。処理を定義して実現する。
Qiitaをググれば記事はいくらでも出てくるんだけど、自分の頭を整理するために書いてみた。
たとえば、郵便局の荷物出荷アプリケーションを考えてみる。
荷物を出荷するには、出荷明細が必要だ。この作成処理は、荷物をどう送るかに関わらず共通の処理をしていそうだ。
荷物を数える、種類ごとに分類する、など。
ならば、アブストラクトで共通化しよう。
いっぽう、荷物の出荷方法はどうか?パック便、冷凍便、メール便、通常便など、送る方法は色々ある。
けれども、「宛名」「送り主」「出荷料金」など、荷物を送る側が用意する情報は一緒になりそうだ。
であれば、インタフェースで統一化しよう。
こんな感じで考えている。しかし、Javaをまともに使ったことがないので、実際のところ曖昧な理解のままだ。