大石泉「オブジェクト指向について教えてほしい?」村松さくら「うん!」

Check このエントリーをはてなブックマークに追加 Tweet

1 : ◆4btDzJY0yc [saga]:2021/10/17(日) 03:30:03.43 ID:sIClmUXX0
モバマス(デレマス)SSです。
初投稿なので至らぬ点があると思いますが、教えていただけるとありがたいです。

登場人物
大石泉
https://i.imgur.com/FAlnZLS.jpg

村松さくら
https://i.imgur.com/nSGp3yi.jpg

土屋亜子
https://i.imgur.com/B5B7shg.jpg

SSWiki : http://ss.vip2ch.com/jmp/1634409003
2 : ◆4btDzJY0yc [saga]:2021/10/17(日) 03:32:18.78 ID:sIClmUXX0
参考
オブジェクト指向設計実践ガイド 〜Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方
3 : ◆4btDzJY0yc [saga]:2021/10/17(日) 03:33:52.43 ID:sIClmUXX0
〜事務所〜

泉「って……プログラミング用語の?ずいぶん難しい言葉知ってるね」


さくら「えへへぇ……。情報の授業で先生が『オブジェクトシコウはすごいぞ!』って言ってたんだけど、詳しいことは授業で教えてくれなかったから、イズミンなら教えてくれると思って♪」


泉「そうなんだ。私も詳しく理解しているってわけじゃないけど……頼ってくれたからには、頑張って教えるよ」


さくら「わぁい!」
4 : ◆4btDzJY0yc [saga]:2021/10/17(日) 03:36:00.74 ID:sIClmUXX0
さくら「というわけで、イズミン先生!よろしくお願いしまぁす!」


土屋亜子「よろしくお願いしまーす!……ってなんでアタシも?」


泉「なんでって……すぐそこの事務所のソファにいたから?


亜子「ついで扱い!?」


さくら「アコちゃんも会話に入れてほしそうな顔してましたぁ♪」


亜子「う〜ん、バレてもうてたかぁ。な〜んて♪まあアタシも、ちょっとは気になるかもな。
……泉先生の授業が」


泉「内容じゃなくて、そっち?もう、からかわないでよ。まあ、いいや。はい、じゃあ先生の授業を始めます」


亜子(今、いずみがちょっとノった?)
5 : ◆4btDzJY0yc [saga]:2021/10/17(日) 03:37:51.72 ID:sIClmUXX0
『オブジェクト指向とは』キュッ


泉「まず簡単に、オブジェクト指向とは何か。これは先に言っておきたいんだけど、実は『オブジェクト指向』って言葉は意味がふわふわしてて、人によっても解釈が違うこともあるよ」


亜子「そうなんかー。とりあえず、難しいんやな。さくらはだいじょぶそ?」


さくら「が、がんばりまぁす」


泉「うん。『オブジェクト指向』っていうのは、プログラミングの考え方の一つなんだけど、よく言われるのは、『全ての要素をモノとして扱う考え方』って感じかな」


さくら「すべてを?ものとして??」ポケ


泉「あとは……『現実世界をそのまま表現する』なんて言われることもあるけど……」


亜子「それだけ聞くとなんかすごそうやけど、どういうこっちゃ?」


泉「うん、難しいよね。だからここは私の言葉で説明すると、『操作したい対象を、一つの物として扱えるように、ひとまとめにしておく。実際のプログラムでは、かたまり同士を作用させる』って感じかな」


さくら「うーん、ちょっとわかりそうだけど……操作したい対象?」
6 : ◆4btDzJY0yc [saga]:2021/10/17(日) 03:40:13.86 ID:sIClmUXX0
亜子「もう一声!」


泉「では二人に質問。『オブジェクト』は日本語でいうと?」


さくら「ええっ!?えっと……えっと……美術館にある像みたいなやつ!」


亜子「それは……オブジェ?
オブジェクトは……『物体』とか?」


泉「そう。『物体』とか『物』って意味。だからオブジェクト指向っていうのは『物に着目した考え方』ってことになるね」


亜子「ああ、なるほど!そう考えると、とりあえず『物』って考え方が大事なんやなってわかるな」


泉「そうだね。そして、『物』っていうのは『操作したい対象』って考えてほしいな。以前読んだ本に出ていた説明のひとつにこういうのがあるよ。

オブジェクトの世界では、(中略)配偶者が猫を踏むコードをわざわざ書く必要はありません。必要なものは、歩き回る配偶者オブジェクトと、踏みつけられることを嫌う猫オブジェクトだけです。この2つのオブジェクトを1つの部屋に配置すれば、予期しない組み合わせの振る舞いはいずれ起こるでしょう。




相川千夏(ちなみに『オブジェ』はフランス語で、英語のオブジェクトと同じ意味よ)
7 : ◆4btDzJY0yc [saga]:2021/10/17(日) 03:42:55.62 ID:sIClmUXX0
亜子「う〜ん、いまいちわかるようなわからへんような」


泉「たとえば、このマーカーペン。亜子はこのペンを使って線を引いてって言われたら、できる?


亜子「そりゃモチロン」


泉「じゃあ、このペンを一から作ってって言われたら、できる?」


亜子「へ?いやいや、そんなんムリやろ」


泉「そうだよね、私もできない。けど、中身はよくわからなくても、使うことはできる。そして、そもそも中身は知る必要がない」


さくら「中身はわからなくても、使えるようになってれば別にいいや♪ ってこと?」


泉「うん。そういうことだよ、さくら」
8 : ◆4btDzJY0yc [saga]:2021/10/17(日) 03:44:43.31 ID:sIClmUXX0
泉「じゃあこのペンをオブジェクト指向プログラミングではどう表現するのか。これは、まず要素としては『色は黒』だよね、そして動作として『線を引くことができる』とか、『別の色のインクを入れるとその色の線が引ける』なんてのもあるよね。まあこのペンは詰め替えできないけど。
じゃあここで、『指定したマーカーのインクを黒から赤に変更する』ってプログラムを作りたいとします。どうしたい?どう習った?」


さくら「ええええ!!?うんと、う〜んと」


泉「まずはpenって構造体があって……」


さくら「あって……構造体はいくつかの変数を合体させたものだから……、
その中にinkって変数があって、その構造体を作った後に

pen.ink = ’赤’

って関数を実行すればいい!」


泉「そう。よく勉強しているね。じゃあ、もし後から、『pen』は『ink』だけじゃなくフタの色を表す『cap_colour』っていう変数も持っていて、inkを変更するときはcapも一緒に変更しないとならないとすると?」
9 : ◆4btDzJY0yc [saga]:2021/10/17(日) 03:47:36.59 ID:sIClmUXX0
亜子「そうなると、

pen.ink = ’赤’

の後に

pen.cap_colour = ‘赤’

って書き足す必要が出てくるな」


泉「そうだね。じゃあ、もし赤にする以外にも、青にする関数とか黒にする関数とか、色を変えている場所が他にもたくさんあったら?」


亜子「そしたら……たくさんの場所を全部変えなきゃいけなくなる?」


泉「そう。それに、一度色を変えたいだけなのにいちいちinkとかcapとか色々な場所を変えないとならないのは大変だし、なによりこの後さらに変更すべき変数が増えたら、また処理を追加しないとならないよね」


亜子「増やさなければええ話やけど、どうしてもっちゅうこともあるしなぁ」
10 : ◆4btDzJY0yc [saga]:2021/10/17(日) 03:49:49.09 ID:sIClmUXX0
泉「こういうとき、オブジェクト指向の考え方では、構造体『pen』のなかに『ink』、『cap_colour』とかの要素を作るのは同じなんだけど、そうしたらね、これらの要素は別の場所からアクセスできないように設定しちゃうの」


さくら「ええ?じゃあどうやってインクの色を変えるの?」


泉「構造体の中に、要素を直接アクセスできるようにする代わりに、色を変更するための『setColour( 入れたい色 )』っていう関数をあらかじめ作っておくの。そしてこの関数を別の場所からアクセスできるように設定して、インクの色を変えるときは要素を直接変更せず、この関数を実行するだけにしてもらうの。そして、

setColour( char a ){
ink = a;
cap_colour = a;
}

こうすれば、インクの色を変えたいときは

setColour( 赤 );

とだけすればいい。さっきみたいに後から別の処理をしないといけなくなったら、構造体にある『setColour( ) 関数』の中身だけ変更すれば、実際に何回呼び出されているとしても、変更は一箇所だけで済む」


亜子「さっきは

pen.ink = ’赤’
pen.cap_colour = ‘赤’

とか

pen.ink = ’青’
pen.cap_colour = ‘青’

みたいに、色を変える箇所全部にcap_colourを追加しないといけんかったよな」


さくら「ほぇ〜」


泉「こういう風に『それぞれのオブジェクトが、内部処理は公開せずに、入力と出力だけ公開すればよい』という手法が、オブジェクト指向の方法のひとつ、『カプセル化』だね」キュッキュ


亜子「ちょいちょい!」
11 : ◆4btDzJY0yc [saga]:2021/10/17(日) 03:51:37.80 ID:sIClmUXX0
泉「?どうしたの」


亜子「今の、オブジェクト指向の説明やなかったんか!?前触れもなく知らん言葉出てきた!」


泉「最初に言ったように、オブジェクト指向っていうのはプログラミングするときの考え方なの。
だから、『オブジェクト指向で作られたプログラム』って言ったときは、『オブジェクト指向を実現できるような、いくつかの技術や手法が取り入れられています』ってことなんだ。
本当は考え方そのものがオブジェクト指向なんだけど、そのための技術や手法のことをオブジェクト指向って言うことが多いから、そのうちの一つを説明したの」


亜子「ほお……、そういうことやったんか」


さくら「『オブジェクト指向』って言葉自体は考え方のことなんだ!
あっ!そういえば『思考』って付いて……あれ?」


泉「勘違いしやすいけど、オブジェクト『指向』だね。『オブジェクトという概念に基づいた』って意味になるのかな。……まあ、『思考』でもそんなに意味は変わらないかもね」
12.59 KB Speed:0   VIP Service SS速報VIP 更新 専用ブラウザ 検索 全部 前100 次100 最新50 続きを読む
名前: E-mail(省略可)

256ビットSSL暗号化送信っぽいです 最大6000バイト 最大85行
画像アップロードに対応中!(http://fsmから始まるひらめアップローダからの画像URLがサムネイルで表示されるようになります)


スポンサードリンク


Check このエントリーをはてなブックマークに追加 Tweet

荒巻@中の人 ★ VIP(Powered By VIP Service) read.cgi ver 2013/10/12 prev 2011/01/08 (Base By http://www.toshinari.net/ @Thanks!)
respop.js ver 01.0.4.0 2010/02/10 (by fla@Thanks!)