[解決済み] カプセル化 vs 抽象化?
質問
カプセル化と抽象化の簡単な定義は以下の通りです。
抽象化です。
Javaにおける抽象化のプロセスは、特定の詳細を隠し、オブジェクトの本質的な機能のみを表示するために使用されます。 オブジェクトの本質的な機能のみを表示するために使用されます。言い換えれば オブジェクトの外見 (インターフェイス) を扱います。 私がさまざまなサイトで見た唯一の良い例は インターフェイスです。
カプセル化です。
<ブロッククオートカプセル化とは、基本的にオブジェクトの状態を隠すことです。 private, public, protected などの修飾子を用いてオブジェクトの状態を隠します。 公開メソッドで公開します。
のような修飾子で何を実現するのでしょうか?
private
,
public
という抽象化された概念で、外界の不要な部分を隠蔽することができます。
以上の説明から、カプセル化は抽象化の一部であり、抽象化のサブセットであることがわかります。しかし、抽象化だけで対処できるのに、なぜカプセル化という言葉が生まれたのでしょうか?私は、この2つを区別する大きな違いがあるはずだと確信していますが、ネット上の資料のほとんどは、この2つについてほとんど同じことを述べています。
この質問は以前にもこのフォーラムで提起されましたが、私は具体的な疑問を持って再びそれを投稿しています。いくつかの回答では、抽象化は概念であり、カプセル化は実装であるとも言っています。もしそれが本当なら、この 2 つの異なる概念は私たちを混乱させるために提供されていると考えることができます。
更新:-) 5年後、私はこの投稿と以下の回答に基づいて、要旨である私自身の答えを考え出しました。
どのように解決するのですか?
カプセル化 は、抽象化の一部として使用される戦略です。オブジェクトはその状態をカプセル化し、外部から隠します。クラスの外部のユーザーは、そのメソッドを通じてクラスと対話しますが、クラスの状態に直接アクセスすることはできません。そのため、クラス は抽象化された は、その状態に関連する実装の詳細から離れています。
抽象化
はより一般的な用語で、(とりわけ)サブクラス化することによっても実現できます。例えば、インターフェイス
List
は、位置によってインデックスが付けられたアイテムのシーケンスの抽象化であり、具体的な例として、標準ライブラリの
List
の具体例は
ArrayList
または
LinkedList
. を操作するコードは
List
と対話するコードは、それがどの種類のリストを使用しているかという詳細を抽象化します。
抽象化は、カプセル化によって基礎となる状態を隠さない限り、しばしば不可能です。クラスがその内部の状態を公開する場合、その内部の動作を変更することはできず、したがって抽象化することはできません。
関連
-
Java エラー報告 スレッド "main" での例外 java.util.NoSuchElementException
-
eclipse アクセス制限です。タイプ 'xxx' は API ではありません(必須ライブラリ '' の制限)。
-
Spring Boot による HTTPS アクセスの設定
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
node js npm gruntインストール、elasticsearch-head 5.Xインストール
-
javaでよく使われる英単語
-
Error: java.lang.NoClassDefFoundError: クラス XXXX を初期化できませんでした
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java Error スレッド "AWT-EventQueue-0" で例外発生 java.lang.
-
springboot project MIMEタイプ text/htmlで転送された静的ファイルを読み込む。
-
eclipse で「アクセス制限: タイプ 'HttpServer' は API ではありません」というプロンプトが表示される。
-
スキャナは、タイプに解決することはできません最もルーキー初心者の質問
-
Enumとの組み合わせでswitchの使い方を一度覚えるために必要な定数式
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
サーブレットクラスのインスタンス化エラーの解決法
-
xxx:jarのアーティファクトディスクリプタの読み込みに失敗した問題は解決しました。
-
Javaエラーメッセージがenclosingクラスでない
-
javax.net.ssl.SSLException: 読み取りエラー: ssl=0xdeae5100: システムコール中の I/O エラー、接続 res