サイズ: 343
コメント:
|
サイズ: 5442
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 1: | 行 1: |
## page was renamed from alstamber/2013FreshManRubySeminar3 | |
行 4: | 行 5: |
* 2013年度新入生向けRuby講習会の第2回向け資料です。 | * 2013年度新入生向けRuby講習会の第4回向け資料です。 |
行 9: | 行 10: |
== オブジェクト指向 == プログラムをオブジェクトの集合であり、オブジェクト同士が相互に関わりあう事で動作するものと捉え直す考え方。 === オブジェクトとは === プログラムにおけるデータとそれを処理するコードを一かたまりのものとしてみなした概念。 === プログラムをオブジェクト指向で書く利点 === プログラムを複数の固まりに分割することができます。これによって大きなプログラムをより小さな対象に分けて作ることができるようになります。<<BR>> よって大規模なプログラムを作りやすくなります。 また同じようなことをしているコードを使いまわすことがやりやすくなる。これによって同じようなコードを何度も書かなくて良くなります。 {{{#!highlight ruby "hoge".reverse #=> "egoh" }}} 上の例は文字列を逆転させる処理をreverseメソッドにやらせた例です。<<BR>> 文字列を逆転させるような処理をわざわざ書かなくてもすでに作られている文字列を逆転させる処理を使えば良くなるのですごく楽です。 |
|
行 10: | 行 28: |
第2回にてクラスというものについてほんの少し触れました。<<BR>> クラスにはオブジェクトが持つべきデータや処理の内容が定義されています。<<BR>> Rubyではオブジェクトの種類をオブジェクトがどのクラスに属しているかをみて判断しています。 |
|
行 11: | 行 32: |
== モジュール == | この仕組みのために例えば整数に対してはreverseメソッドは実行できないし、文字列に対してはtimesメソッドを実行することはできません。 === クラスの定義 === クラスには処理(=メソッド)が定義されているという話をしましたが、それはどのように定義されているのでしょうか。 {{{#!highlight ruby class Hoge ...(中身)... end }}} クラスの定義はclassというキーワードから始まります。<<BR>> その後ろにクラスの名前を書きます。クラスの名前は必ず大文字から始まらなければいけません。 === インスタンス === たとえば文字列を考えましょう。文字列はStringというクラスに属しているという話をしました。<<BR>> これは言い換えれば、Stringというクラスに書かれているメソッドなどの定義をもとにして、実際の文字列というオブジェクトが作られているとも言えます。<<BR>> このように考えた時、クラスに対してクラスを元にして作られた実際のオブジェクトのことを「インスタンス」といいます。<<BR>> Rubyの文字列はStringクラスのインスタンスです。 === インスタンスメソッド === 引き続き文字列について考えましょう。Rubyの文字列に対してはreverseやlengthなどのメソッドを呼び出すことができました。このようなメソッドはインスタンスに対して呼び出されるので、そのことを強調して「インスタンスメソッド」と呼ばれることもあります。 === インスタンスメソッドの定義 === インスタンスメソッドをクラスで定義するにはどうすれば良いのでしょうか。 インスタンスメソッドを定義するには次のように書きます。 {{{#!highlight ruby class Hoge def インスタンスメソッド名 ... end end }}} 要はクラスの定義の中にメソッドの定義を普通に書けば良いってことです。 === クラスの話をすすめるために === クラスの話をすすめるために、自分で独自のクラスを作る、という事を考えようと思います。 今回作成するクラスは学生を表すクラスです。名前はStudentにしましょう。 Studentクラスには次のようなデータをおいておけるようにしたいとします。 * 学籍番号 * 名前 * 学科 * 性別 あとで成績を表すデータも追加しますが、とりあえずはこれだけで。 === new === 上のStudentクラスを実際にプログラム中で使うためには、クラスを元にしたインスタンスを作る必要があります。<<BR>> (Stringクラスがそのままでは使えず、""で囲んだ文字列の形というインスタンスの形にして初めて使えるようになるのと同じです) Stringクラスの場合、""で文字の並びを囲むことで勝手にStringクラスのインスタンスを作ることができましたが、今作ろうとしているStudentクラスではそういうことはできません。そこでnewという特別なキーワードを使います。 {{{ a = new Student }}} 上のように書くことで、Studentクラスを元にインスタンスを作って、それをaに代入できます。 |
なにこれ
- 2013年度新入生向けRuby講習会の第4回向け資料です。
- まず第1, 2回向け資料をお読みください。
オブジェクト指向
プログラムをオブジェクトの集合であり、オブジェクト同士が相互に関わりあう事で動作するものと捉え直す考え方。
オブジェクトとは
プログラムにおけるデータとそれを処理するコードを一かたまりのものとしてみなした概念。
プログラムをオブジェクト指向で書く利点
プログラムを複数の固まりに分割することができます。これによって大きなプログラムをより小さな対象に分けて作ることができるようになります。
よって大規模なプログラムを作りやすくなります。
また同じようなことをしているコードを使いまわすことがやりやすくなる。これによって同じようなコードを何度も書かなくて良くなります。
1 "hoge".reverse #=> "egoh"
上の例は文字列を逆転させる処理をreverseメソッドにやらせた例です。
文字列を逆転させるような処理をわざわざ書かなくてもすでに作られている文字列を逆転させる処理を使えば良くなるのですごく楽です。
クラス
第2回にてクラスというものについてほんの少し触れました。
クラスにはオブジェクトが持つべきデータや処理の内容が定義されています。
Rubyではオブジェクトの種類をオブジェクトがどのクラスに属しているかをみて判断しています。
この仕組みのために例えば整数に対してはreverseメソッドは実行できないし、文字列に対してはtimesメソッドを実行することはできません。
クラスの定義
クラスには処理(=メソッド)が定義されているという話をしましたが、それはどのように定義されているのでしょうか。
クラスの定義はclassというキーワードから始まります。
その後ろにクラスの名前を書きます。クラスの名前は必ず大文字から始まらなければいけません。
インスタンス
たとえば文字列を考えましょう。文字列はStringというクラスに属しているという話をしました。
これは言い換えれば、Stringというクラスに書かれているメソッドなどの定義をもとにして、実際の文字列というオブジェクトが作られているとも言えます。
このように考えた時、クラスに対してクラスを元にして作られた実際のオブジェクトのことを「インスタンス」といいます。
Rubyの文字列はStringクラスのインスタンスです。
インスタンスメソッド
引き続き文字列について考えましょう。Rubyの文字列に対してはreverseやlengthなどのメソッドを呼び出すことができました。このようなメソッドはインスタンスに対して呼び出されるので、そのことを強調して「インスタンスメソッド」と呼ばれることもあります。
インスタンスメソッドの定義
インスタンスメソッドをクラスで定義するにはどうすれば良いのでしょうか。
インスタンスメソッドを定義するには次のように書きます。
要はクラスの定義の中にメソッドの定義を普通に書けば良いってことです。
クラスの話をすすめるために
クラスの話をすすめるために、自分で独自のクラスを作る、という事を考えようと思います。
今回作成するクラスは学生を表すクラスです。名前はStudentにしましょう。
Studentクラスには次のようなデータをおいておけるようにしたいとします。
- 学籍番号
- 名前
- 学科
- 性別
あとで成績を表すデータも追加しますが、とりあえずはこれだけで。
new
上のStudentクラスを実際にプログラム中で使うためには、クラスを元にしたインスタンスを作る必要があります。
(Stringクラスがそのままでは使えず、""で囲んだ文字列の形というインスタンスの形にして初めて使えるようになるのと同じです)
Stringクラスの場合、""で文字の並びを囲むことで勝手にStringクラスのインスタンスを作ることができましたが、今作ろうとしているStudentクラスではそういうことはできません。そこでnewという特別なキーワードを使います。
a = new Student
上のように書くことで、Studentクラスを元にインスタンスを作って、それをaに代入できます。