プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • オブジェクト指向
  • 【Java】オブジェクト指向:カプセル化
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Java】オブジェクト指向:カプセル化

04.30

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

Javaのオブジェクト指向のカプセル化は、「しかるべき、クラスやメソッドからしかアクセスさせない」というプログラムの中でのアクセス制御の考え方です。

フィールド、メソッドに対するカプセル化

アクセス修飾子

Javaでは、下記のアクセス修飾子を「フィールド」や「メソッド」に付けることで、カプセル化を実現します。

アクセス修飾子 説明
private 自分自身のクラスからのみアクセス可能
何も書かない 自分と同じパッケージからのみアクセス可能
protected 自分と同じパッケージかつ、自分を継承したクラスからのみアクセス可能
public 全てのクラスからアクセス可能

getter、setterメソッド

例えば、下記のように「本」をクラスとして見立てた「Bookクラス」があったとしたら、本の名前のフィールドには、privateをつけて、その本の名前を取得したり(getterメソッド)、設定したりするメソッド(setterメソッド)のみに、publicとします。

「gettName」メソッド経由でしかアクセスできませんし、本の名前をセットする場合は、「setName」経由でしか設定ができません。

1
2
3
4
5
6
7
8
9
10
11
12
public class Book {
 
private String name;
 
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
 
}

getter、setterメソッドによるメリット

Read-Onlyなフィールドを作れる。

例えば、setterメソッドのみ外せば、外部から読み込みだけできて、書き込みが出来ないクラスというRead-Onlyなクラスを作ることができます。(普通のフィールドでは、アクセス修飾子を使って、書き込みも読み込みもどちらも出来ないという制御しかできませんからね。)

逆に、普通はあまり見かけないですが、Wrte-onlyなフィールドも作れたりしますね。

フィールドの名前の変更に強い

例えば、nameというフィールド名が、「bookName」に変えたいといった場合でも、フィールドの名前と、getter、setterメソッドの設定値だけ変えれば、他のクラスに影響を与えずに、名前の変更を行うことが可能です。

設定する値をチェックできる。

例えば、setterメソッドに下記のように記述することで、名前の設定前に設定内容のチェックを行うことができます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Book {
 
private String name;
 
public String getName() {
return name;
}
public void setName(String name) throws Exception {
 
if (name == null) {
throw new Exception("名前が設定されていない");
}
 
this.name = name;
}
 
}

なので、バグに強いシステムを作ることへも貢献してくれます。

クラスに対するカプセル化

フィールドやメソッドだけでなく、「クラス」に対してもカプセル化をかけることができます。

アクセス修飾子

アクセス修飾子 説明
何も書かない(非public) 自分と同じパッケージに属するクラスのみアクセス可能
public 全てのクラスからアクセス可能

 

スポンサーリンク
  • 2018 04.30
  • miyabisan2
  • コメントを書く
  • Java, オブジェクト指向
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 04.22

    【デザインパターン】DAO/DTOパターン

  2. 2018 05.03

    【Java】Javaプログラマーなら知らないと今後が危うい!?ラムダ式をわかりやすく解説(Java8以降)

  3. 2018 04.15

    【サーブレット】サーブレット、CGI、PHPの比較、サーブレットの動作の仕組み、注意点

  4. 2022 03.26

    【オブジェクト指向】「集約」、「継承」、「委譲」の使い分け

  5. 2018 04.22

    【Java】Oracleに接続するには?

  6. 2018 04.15

    【サーブレット】画面遷移その1(ディスパッチ:リクエストの転送)

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Java】オブジェクト指向:静的(static)メン…

【システム開発】チューニングの基礎知識

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー