抽象データ型と情報隠蔽

先日の一人ボケ突っ込み,いや,一人突っ込みボケ,かな? とにかくほげほげぇの「なぜ情報隠蔽と実装隠蔽を区別したいのか」について,moneyさんからコメントを頂きました.

上の話(情報隠蔽)は、「抽象データ型」の話と「実装とインタフェースの分離」の話がごっちゃになってるような気がしました。

むむぅ.難しいコメントですね...
何が難しいかというと,「抽象データ型」の定義がよくわからないのです.
ということで,まずはMartin/Odellの「オブジェクト指向方法序説 基盤編(isbn:4810185923)」より引用.

抽象データ型(Abstraction Data Type : ADT)
データ構造と許された操作の定義を含むオブジェクトの型.抽象データ・タイプは許された操作を通じて,オブジェクトに公開(public)のインタフェースを提供する.しかしながら,このインタフェースの表現とメソッドは非公開(private)である.またオブジェクト・タイプともいわれ,オブジェクト指向プログラミング言語ではクラスとして実装される.

ここからは,抽象データ型はデータ構造と操作をカプセル化したものだということが窺えます.同時に,情報隠蔽されたものだということも窺えます.じゃあ,クラスとはどう違うの?
それが最後に書かれている「オブジェクト指向言語ではクラスとして実装される」ですね.つまり,抽象データ型を実装したものがクラスである,と.
この定義は,「オブジェクト指向入門(isbn:4756100503)」でも同様だったはず.本が手元にない(職場にある)のですが,抽象データ型は概念的なものとされ,形式的(数学的)に定義されていたはず.副作用も許されず,読んでて辛くなった記憶があります.そしてそれをプログラミング言語で実現したものがクラスであったと思います.
まとめると,

抽象データ型
概念的なもの.
(Javaの) interface
プログラミング言語により実現される抽象データ型の仕様.
(Javaの) class
プログラミング言語により実現される抽象データ型の実装.

というところで『「抽象データ型」と「実装とインタフェースの分離」がごっちゃになっている』というご指摘ですが,それはつまり,「クラス(実現)と抽象データ型(概念)の違い」と「class(実装)とinterface(仕様)の違い」がごっちゃになっているということでしょうか? うーみゅ.
自分的には実装(実現)レベルの話しかしていないつもりなので(なんたって「実装隠蔽」が主題なのだ),抽象データ型が出てくる隙はないような気もするのですが,どこかコメントの意味を読み違えているのでしょうか? あるいは抽象データ型の定義が違うのか?