>  > プロジェクトμ NS-C フロント左右セット ブレーキパッド セドリック PY31/KPY31 F231 プロジェクトミュー プロミュー プロμ NS-C ブレーキパット【店頭受取対応商品】
TERZO (テルッツォ) トヨタ ランドクルーザープラド H8.5~H14.9 KDJ.KZJ.RZJ.VZJ9# 3ドア ルーフレール無車 品番:EF3TM/EB6 ベースキャリア 1台分セット

キープスマイルカンパニー製レスポンスリングHYBRIDダブルリング仕様 ホンダ フィットハイブリッド

ITエンジニアのための技術支援サイト

IT専科TOPCUSCO (クスコ) LSD type RS スーパーローファイナル専用 トヨタ 86 ZN6 12.4- 2way(1.5&2way) [LSD 987 L2] 205/65R16 95H BRIDGESTONE ブリヂストン ECOPIA NH100 エコピア NH100 ZACK SPORT-01 ザック シュポルト01 サマータイヤホイール4本セット >Java入門> オブジェクト指向

プロジェクトμ NS-C フロント左右セット ブレーキパッド セドリック PY31/KPY31 F231 プロジェクトミュー プロミュー プロμ NS-C ブレーキパット【店頭受取対応商品】

Javaは「オブジェクト指向言語」と言われていますが、それは単に「Javaプログラム=オブジェクト指向」といっている訳ではありません。「オブジェクト指向」に基づいての設計があってこそ、その恩恵を受けることが出来るのです。

ここでは「オブジェクト指向の三大要素」と呼ばれる次の項目について、その実装方法をみていきたいと思います。

  • カプセル化
  • 継承
  • ポリモーフィズム

但し、上記の要素が含まれていればオブジェクト指向であるとうわけではないことに注意してください。

オブジェクト指向の本質はインスタンスをより独立した「オブジェクト」(もの)として扱えるように向かわせる(指向)ことです。つまり各オブジェクトの独立性を高めていくことがオブジェクト指向の手法であり、具体的にはインスタンスへのアクセス方法の整備とインスタンス間の結びつきを弱める(汎用的にする)ことだと言えます。


これを踏まえて、オブジェクト指向三大要素の各手法をみていきます。


プロジェクトμ NS-C フロント左右セット ブレーキパッド セドリック ハチロク PY31/KPY31 ガリット F231 プロジェクトミュー プロミュー プロμ NS-C ブレーキパット【店頭受取対応商品】

カプセル化とはクラス(インスタンス)を一つのオブジェクトとしての独立性を高めようとするものです。

具体的に言うと、「メンバ変数」や「メソッド」に対して「アクセス修飾子」を適切に設定し、クラス(インスタンス)に対するアクセス制御を行います。これによりクラス(インスタンス)のアクセス(使用方法)が統一されて独立性が高まり、その結果、予期せぬバグを防いだり、クラス(インスタンス)の変更や組換えなどが容易になります。


プロジェクトミュー PY31/KPY31 F231 プロジェクトμ NS-C PY31/KPY31 セドリック セドリック フロント左右セット NS-C ブレーキパット【店頭受取対応商品】 プロμ プロミュー ブレーキパッド

「ねこクラス(Cat1101)」を例にカプセル化を考えます 205/55R16 91V BRIDGESTONE ブリヂストン ECOPIA NH100 エコピア NH100 JOKER SHAKE ジョーカー シェイク サマータイヤホイール4本セット。このクラスはメンバーにcry変数(鳴き声)を持っていますが、アクセス修飾子がprivateになっていますので、外部から直接変更されることはなく、おもわぬ鳴き声に変更されてしまうようなことはありません。またcry変数へのアクセスは次のメソッド「bark()(鳴き声を出力)」、「changeCry()(鳴き声を変える)」だけとなっているので「ねこクラス」のバグや仕様変更(鳴き声を変える、バリエーションを増やすなど)があった場合、これらのメソッド内で変更を吸収することができ、他のクラスへの影響を押さえることが出来ます。


・サンプルソース(Sample1101.java)

public class Sample1101 {
 public static void main (String[] args) {
 Cat1101 cat = new Cat1101();
 // ねこクラス(Cat1101)へのアクセス。
 cat.bark(); // 鳴き声を聞く。
 cat.changeCry(); // 鳴き声を変える。
 cat.bark(); // 鳴き声を聞く。
 }
}
// ねこクラス
class Cat1101 {
 // private修飾子により、外部から直接このcry変数(鳴き声)を変更されることはありません。
 private String cry = "ニャンニャンニャン";
 // cry変数(鳴き声)を出力するのはこのメソッドのみです。
 public void bark() {
 System.out.println("ねこ : " + cry);
 }
 // cry変数(鳴き声)を変更できるのはこのメソッドのみです。
 public void changeCry() {
 this.cry = "ニャ~オ";
 }
}
 

・実行結果

C:\dev\java>javac Sample1101.java [Enter]
C:\dev\java>java Sample1101 [Enter]
ねこ : ニャンニャンニャン
ねこ : ニャ~オ
 
 

カプセル化のポイント

メンバーへのアクセス修飾子を適切に設定することで、予期せぬバグを防いだり、仕様変更などを行う際に他のクラスへの影響を少なくすることができる。つまりクラスの独立性が高まったことになります。

▲PageTopズーム ダウンフォースサス 1台分 ギャラン/エメロード EA1A 4G93 H8/9~ サスペンション

継承

継承は別のクラスの機能をすべて引き継ぐことができるというとても便利なものです。しかし、これをもって継承はオブジェクト指向の三大要素の一つだといっているのではありません。むしろオブジェクト指向の観点からすると、単に別のクラスにある機能を取り入れたいだけで継承を用いるべきではないといえます。ここではオブジェクト指向の観点から継承の取り扱いをみていきます。


継承関係とは「is a」関係つまり「親クラスA」と「子クラスB」があった場合に「B is A」(BはAである)となります。よってBをAとして取り扱うことも可能になるわけです [siecle] シエクル MINICONα ミニコンα ジムニー JB23W K6A(ターボ) 04.10~08,05 5-6型。これはクラス間の連携をより抽象的(汎化)することでオブジェクトの独立性を高めるという、 オブジェクト指向設計における最も重要な要素の1つを実現しています。(インタフェースを実装することも同様の効果があります。)


継承の例

例えば、親クラスに「動物クラス(Animal1102)」、そしてそれを継承した「ねこクラス(Cat1102)」があったとします 【送料無料 ソリオ(MA26S)】 165/70R14 14インチ WEDS ウェッズ レオニス UC 4.5J 4.50-14 MICHELIN ミシュラン エナジー セイバープラス サマータイヤ ホイール4本セット。この場合、ねこクラスを動物クラスとして取り扱うことが可能となります。


・サンプルソース

public class Sample1102 {
 public static void main (String[] args) {
 Cat1102 pet = new Cat1102();
 // 「ねこクラス」は次のように「動物クラス」型変数に代入して使用することも可能です。
 // Animal1102 pet = new Cat1102();
 // 引数が「動物クラス」の場合、「ねこクラス」のインスタンスを「動物クラス」のインスタンスとして使用できます。
 PetCare1102.giveBait(pet);
 }
}
// 動物クラス
class Animal1102 {
 public void eat(String food){
 System.out.println(food + "を食べました。");
 }
}
// ねこクラス
class Cat1102 extends Animal1102 {
 private final String CRY = "ニャンニャンニャン";
 public void bark() {
 System.out.println("ねこ : " + CRY);
 }
}
// ペットの世話用クラス
class PetCare1102 {
 // 引数が「動物クラス」なので、「ペットの世話用クラス」は「ねこクラス」専用のクラスではなくなります。(汎用化)
 public static void giveBait(Animal1102 animal){
 animal.eat("エサ");
 }
}
 

・実行結果

C:\dev\java>javac Sample1102.java [Enter]
C:\dev\java>java Sample1102 [Enter]
エサを食べました。
 
 

継承のポイント

クラス連携の際、実クラスではなくその親クラスを使用することで、クラス間の結びつきが弱まり、より汎用的になります。従ってクラス(オブジェクト)の独立性を高める事が出来ます。

▲PageTop

ポリモーフィズム(多態性)

「ポリモーフィズム」とは、「抽象クラス」や「インターフェース」などを利用してメソッドの呼び出し方法を共通化し、さらに「オーバーライド」させることで同じメソッドを呼び出しても、実際のインスタンス毎にその挙動を変化させようとするものです。


説明よりも実際の動きをみたほうが理解しやすいと思います 。


ポリモーフィズムの使用例

「動物クラス(Animal1103)」を継承した「ねこクラス(Cat1103)」、「いぬクラス(Dog1103)」、「かえるクラス(Frog1103)」、「あひるクラス(Duck1103)」があります 215/35R18 サマータイヤ タイヤホイールセット 【送料無料】Advanti ER-ADVANTI FALTIMA 18x7.0 +40 114.3x5 MBP + NANKANG NS-20 (215/35-18 215-35-18 215 35 18) 夏タイヤ 18インチ 4本セット 新品。「呼び出しクラス(Sample1103)」は「ペットクラス」から取り出した「動物クラス」のメソッド(.bark())を呼ぶだけですが、その挙動は実際に呼び出されるインスタンス(「ねこ」、「いぬ」、「かえる」、「あひる」)により変化します。

プロジェクトμ NS-C フロント左右セット ブレーキパッド セドリック PY31/KPY31 F231 プロジェクトミュー プロミュー プロμ NS-C ブレーキパット【店頭受取対応商品】【100%品質保証】


・サンプルソース(Sample1103.java)

public class Sample1103 {
 public static void main (String[] args) {
 Animal1103[] animal = Pet1103.getAnimal();
 for(Animal1103 pet: animal) {
 // 実際のインスタンスの区別なく動物が鳴くという処理(bark())のみで済ますことができます 【割引クーポン配布中】Clazzio/クラッツィオ アルカンターラセレクション オデッセイ/RC2 H25/11~H28/1 パワーシート 8人乗 カラーアイボリー【31EHC2511V】。
 pet.bark();
 }
 }
}
// ペットクラス
class Pet1103 {
 public static Animal1103[] getAnimal() {
 Animal1103[] animals = {new Cat1103(), new Dog1103(), new Frog1103(), new Duck1103()};
 return animals;
 }
}
// 動物クラス(抽象クラス)
abstract class Animal1103 {
 public abstract void bark();
}
// ねこクラス
class Cat1103 extends Animal1103 {
 public void bark() {
 System.out.println("ねこ:ニャンニャンニャン");
 }
}
// いぬクラス
class Dog1103 extends Animal1103 {
 public void bark() {
 System.out.println("いぬ:ワンワンワン");
 }
}
// かえるクラス
class Frog1103 extends Animal1103 {
 public void bark() {
 System.out.println("かえる:ガァーガァーガァー");
 }
}
// あひるクラス
class Duck1103 extends Animal1103 {
 public void bark() {
 System.out.println("あひる:がぁーがぁーがぁー");
 }
}
 

・実行結果

C:\dev\java>javac Sample1103.java [Enter]
C:\dev\java>java Sample1103 [Enter]
ねこ:ニャンニャンニャン
いぬ:ワンワンワン
かえる:ガァーガァーガァー
あひる:がぁーがぁーがぁー
 
 

ポリモーフィズムのポイント

親クラス(共通クラス)の型でクラス連携及びメソッドの呼び出しまで実インスタンスを意識することなく行えるため、クラスの独立性を高めることになります。

プロジェクトμ NS-C フロント左右セット ブレーキパッド セドリック PY31/KPY31 F231 プロジェクトミュー プロミュー プロμ NS-C ブレーキパット【店頭受取対応商品】

▲PageTopProject μ プロジェクトミュー ブレーキパッド RACING-N1 リア スカイライン DR30系(TURBO) ボッシュ エアロツイン ワイパーブレード フロント 650/400mm 右ハンドル車用 A423S(3 397 007 423) C3 [A51] A55F01

{yahoojp} {itsenka.com}
{yahoojp}jpprem01-zenjp40-wl-zd-55281