Privacy Policy Cookie Policy Terms and Conditions クラス (コンピュータ) - Wikipedia

クラス (コンピュータ)

出典: フリー百科事典『ウィキペディア(Wikipedia)』

クラスclass)は、オブジェクト指向においてオブジェクトの設計図にあたるもの。抽象データ型の一つ。クラスから生成したオブジェクトのことをインスタンスという。

クラスには、保持するデータ型(メンバ変数フィールドUMLでは「属性」ともいう))と操作(メンバー関数メソッド)が記述される。アクセス範囲(public、private、protectedなど)や可変かどうか(final、 constantなど)等についても、記述されている。

クラスの特徴として、継承ポリモーフィズム, カプセル化などがある。

[編集] 継承(inheritance、extension、generalization)

あるクラスを基にして別のクラスをつくることを「継承」という。 「継承」は拡張ともいうことがあり、UMLでは「汎化(generalization)」と呼んでいる。 継承の基になったクラスを親クラス基本クラススーパークラス等といい、継承してできたクラスを子クラス派生クラスサブクラス等という。

複数のクラスを基にしてクラスを継承することを多重継承という。多重継承は、二つのクラスの同名メソッドのオーバーライドによるコンフリクトを始めとするいくつかの問題点が指摘されており、JavaC#D言語等では実装多重継承サポートされておらず、 インタフェース多重継承のみサポートされている。

また、オブジェクト指向を効率よく使いこなすためには継承だけでなく集約(aggregation)、委譲(delegation)を 理解する必要がある。

[編集] ポリモーフィズム(polymorphism)

継承する際に、親クラスの関数を子クラスの関数で置き換えることをオーバーライドという。オーバーライドをうまく使うと、オブジェクトによって、実質的に実行される関数が変わるようにできる。このようにして、見かけが一緒なのに動作が違うようにできることをポリモーフィズム(ポリモルフィズム)多様性多態性などという。

[編集] カプセル化(encapsulation)

クラス内のフィールドメソッドにアクセス権を指定することで、 外部から勝手にフィールドを変更できないようにすることができ、メソッドの使用を 特定のクラス、パッケージ内でしか使用できないようにすることでプログラムの堅牢性、拡張性、 移植性、汎用性、安全性、信頼性を高めることができる。

たとえば、Javaを例にとると、

以下のようなクラスがあったとき、

class NonEncapsulatedClass {
  public int x;
  public NonEncapsulatedClass(){
    x = 100;
  }
  public int getX(){
    return x;
  }
}

このクラスを外部から利用するには

NonEncapsulatedClass nec = new NonEncapsulatedClass();

とすることでインスタンスを生成し、

System.out.println(nec.x);

とすることでNonEncapsulatedClassクラスのpublicなフィールドxにアクセスできコンソールに実行結果として100と表示することができる。 また、getX()メソッドを使って

System.out.println(nec.getX());

とすることでもフィールドxにアクセスし同じ実行結果を返すことができる。 また、 publicな変数なため当然、

nec.x = -20;
System.out.println(nec.x);

とすることでフィールド値を100から-20に変えて表示することもできる。

このクラスはフィールド変数xpublicになっているため簡単にxにアクセスでき、 簡単にデータを変えることができてしまい、カプセル化されていない。

ここで上記のクラスを以下のように変更すると

public final class NonEncapsulatedClass {
  private int x;
  public NonEncapsulatedClass(){
    x = 100;
  }

  public int getX(){
    return x;
  }
  public void setX(int x)  {
    try {
      if(x < 0){
        throw new ArithmeticException("負の値は入力しないでください。");
      } else if( x > 200){
        throw new ArithmeticException("このクラスは200より大きな値はサポートしていません。");
      } else {
        this.x = x;
      }
    } catch (ArithmeticException e){
      e.printStackTrace();
    } catch (Exception e){
      e.printStackTrace();
    } finally {
      System.out.println("The end.");
    }
  }
}

このクラスを他のクラスから呼び出すとき

System.out.println(nec.x);

としただけでコンパイルエラーが発生する。フィールド変数xはアクセス権がprivateなので 同一クラス内からしかアクセスできない。それに違反しているためこの時点でコンパイルエラーとなる。

ここではgetX()メソッドを使って間接的にしかフィールド変数にアクセスすることができない。

System.out.println(nec.getX());

このxを以下のようにして変更しようとすると、

nec.x = -20;

この時点でもコンパイルエラーが発生する。 ここでフィールド変数xを変更するには、フィールド変数はprivateになっており、 クラスの修飾子にはfinalがついているため継承が禁止されておりサブクラスからフィールド変数にアクセスすることもできない。 ここではsetX(int x)メソッドを使わなくてはxにアクセスしてxの値を変更することはできない。 では、 ここでsetX(int x)を以下のように実行したらどうなろうだろうか。

nec.setX(-20);

プログラムソースコードのコンパイルは通る。しかし実行時に ArithmeticException例外が生じてプログラムが終了してしまうだろう。 なぜならそのようにプログラムされているからだ。 同様に

nec.setX(201);

としてもArithmeticException例外が生じて終了してしまうだろう。 このようにフィールド変数xに代入できる数値範囲を計器やバルブの調節ツマミの安全弁のように限定したいとき、 安全のため、セキュリティのため、不用意にこの変数に特定の値を入れたくないときカプセル化は役立つのである。

このようなカプセル化を実現する手法や構文にアクセサプロパティなどが存在する。

THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu