Javaオブジェクト指向プログラミング講座

アクセスメソッドについて

全334コースを10日間無料で

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
カプセル化されているデータをアクセスするアクセスメソッドについて解説します。
講師:
07:40

字幕

このレッスンではカプセル化されているデータをアクセスするアクセスメソッドについて解説します。アクセスメソッドフィールドの値の設定/取得はアクセスメソッドで行う。直接アクセスしないでアクセスメソッドで行います。これはアクセッサーとも呼ばれます。セッター、セットする方をセッターと呼びます。フィールドの値の設定これは set + フィールド名という名前のメソッドにします。ゲッター、逆に値の取得外部から値を取得する方法これは get + フィールド名というメソッド名にします。アクセスメソッドクラスがこうあったとします。属性の方が private操作の方が public ですね。ここの setId getId setName getNameこういう風にフィールド名属性名ですね。先頭を大文字にします。Id の I を大文字Name の N を大文字です。これを Java で書くとsetIdgetIdsetNamegetNameこれがアクセッサーです。setId というのは要はここの値をフィールドにセットする、それだけですね。getId は Id の値を読み取るreturn id、それだけです。setName は外部からname を設定するname = name0getName は return name ですね。 アクセスメソッドの使い方この Main プログラムの方でどうやって使うか。例えば Kokyaku k = new Kokyakuデフォルトコンストラクタを使います。その時に k.id としないでk.id は反則と言いましたね。k.id はルール違反です。k.setId とします。面倒臭いようですけどもこれがオブジェクト指向のルールです。必ずメソッドを通します。k.setIdk.setNameそして読み取る時も直接 k.id じゃなくてk.getIdk.getName最初にこういうのを見た時なぜこんな面倒臭いことをするんだろうと疑問が生じます。k.id でいいのにわざわざこんなメソッドを使わなくてもいいじゃないかと。でも、これは非常にメリットがあるんです。どういうメリットと言うよりもこれをやらないとデータを直接誰でもアクセスできることになるんですね。そうすると、オブジェクト指向のメリットが無くなる。オブジェクト指向のメリットはこのデータをアクセスできる人この人が決まっているわけですね。ここからしかアクセスできない。だから修正とか拡張とかしていく時にトラブルが生じにくい。長い目で見ると、これは非常にメリットがあるんです。 Java で動かしてみます。NetBeans で「新規プロジェクト」デフォルトのままで「次へ」プロジェクト名を accessor とします。それで参照はこのままメインクラスの名前を Main にします。これで OK です。ここに又 Kokyaku というクラスを作ります。それで今度は accessor によってフィールドの値にアクセスしますのでデフォルトコンストラクタのままでいきます。だからコンストラクタは書きません。まず idsetId getId を作ります。setId は id = id0getId は return id です。public にしておきます。次に Name の方ですね。setName name = name0getNamereturn nameこれがセッターとゲッターです。次に Main の方を作っていきます。フィールドの値をセッターによってセットします。k.setName で「宮本太郎」とします。これがセッターです。次がゲッターです。print の中をゲッターを使ってk.getIdこれで Id ですね。k.getNameこれで名前を取得します。実行をかけてみます。 「1001 宮本太郎」とこれで OK です。情報隠蔽に関してデータ抽象という概念があります。どういうことかと言うとオブジェクトの保持するデータはメソッドでアクセスする、これが情報隠蔽ですね。外部から直接アクセスさせない。これは情報隠蔽という意味とデータ抽象という意味があるんです。どういうことかと言うと内部を変更しても外部に影響を与えない。つまり値の取得、このゲッターというもの外部からゲッターで呼ぶわけですね。すると内部データの持ち方都合によって書いたとしても外部に影響を与えないわけです。もう少し具体的に説明しますと例えば、getHoursあるクラスが時間を内部でもっていたとします。外部から getHours 時間で取得するというのとgetMinutes 分単位で取得すると。内部データはどういう風に持ってるか例えば時間でもフローティングで時間を持っていてもいいし或いは Int 型で分単位で持っていてもいいし或いは秒単位で持っていてもいいです。それでこれを呼ばれた時に変換してそれを返してやればいいわけですね。外部からは中はどういうデータを持っているかそういうのは関係ないわけです。そうすると、この仕様変更の影響例えば今度 getSeconds を新規作成した、秒単位で時間をくださいこういうのを追加したとします。 そうすると、内部の持ち方じゃ今度は今まで分単位で持っていたのを仮に秒単位に変えたとします。それでもこの getHours getMinutes は計算してそういう値を返してやればいいわけでつまり、外からは今まで使っていたこれが全然影響を受けない訳です。内部だけを変えればいいわけです。これデータ抽象なんです。つまりデータを直接使ってないでこの操作 メソッドですね。メソッドで呼び出してる、データそのものは抽象化されている、そういう考え方があってこれはメリットです。このレッスンではカプセル化されているデータをアクセスするアクセスメソッドについて解説しました。

Javaオブジェクト指向プログラミング講座

このコースではオブジェクト指向プログラミングの3大特徴である「カプセル化」「継承」「多態性」を、UMLモデルとJavaプログラムを対比しながら解説します。「カプセル化」ではコンストラクタや可視性、「継承」ではUML汎化関係とJavaの関係、「多態性」では継承およびインタフェースによるプログラミング方法などを説明します。

3時間23分 (36 ビデオ)
現在、カスタマーレビューはありません…
 
ソフトウェア・トピック
価格: 2,990
発売日:2016年09月27日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。