Slide 1

Slide 1 text

オブジェクト指向を理解するために マインスイーパーをモブプロする 2024.09.30 Kashiwa.rb #3 Koji NAKAMURA (@kozy4324)

Slide 2

Slide 2 text

プログラミング初学者が悩んでいます あなたならどういった説明をしますか? オブジェクト指向って何? どう嬉しいの? 型って必要?

Slide 3

Slide 3 text

今回のテーマは「オブジェクト指向」 みなさんはどういった解釈を持っていますか?そこらへん会話したい - そもそもオブジェクト指向とは何なのか? - どういった考え方でプログラミングするもの? - 何が嬉しいの?

Slide 4

Slide 4 text

せっかくなのでコード書きながら会話したい みんなで「マインスイーパー」を作ってみましょう

Slide 5

Slide 5 text

なんでマインスイーパー? - ルールが割と簡単 - 分からなかったら「マインスイーパー」でググってプレイできる - オブジェクトっぽいもの、いくつかすぐ出てきそうじゃん? - 会話しながらオブジェクトのモデリングにチャレンジしたい - minesweeper を Ruby で実装して gem 公開している人が結構いる - https://rubygems.org/search?query=minesweeper - どういった概念をモデリングして Rubyでどう表現しているのかはあとで参考にしよう

Slide 6

Slide 6 text

ゴール マインスイーパーにおいては、 - ○○という概念が出てきて、 - xxというオブジェクトにモデリングして、 - △△な実装にすることで、 - □□というメリットが得られた みたいな話が少しでもできるようになるといいのでは!?

Slide 7

Slide 7 text

Let’s モブプロ!

Slide 8

Slide 8 text

Appendix(1): マインスイーパーの要件 - m 行 n列のマスに x 個の爆弾がランダムに配置される ( m * n > x ) - 初期状態では全てのマスが伏せられた状態(爆弾が置かれているかどうかがユー ザーは識別できない) - ユーザーは3つの操作のいずれかを繰り返す - 1. 伏せられているマスを開く - 2. 伏せられているマスに旗を立てる - 3. 立てられた旗を取り下げる - マスを開いた際、そのマスに爆弾があれば終了(ゲームオーバー) - 開いたマスには周辺マス(斜め隣含む8マス)に置かれている爆弾の数と等しい数 の数字が書かれている(0〜8) - 旗は最大で全ての爆弾数と同じ数だけマス上に同時に立てることができる - 爆弾が置かれているマスには旗を立て、それ以外のマスは全て開ければゲームク リア

Slide 9

Slide 9 text

Appendix(2): モデリングの話 (1) ChatGPTくんが言語化をしてくれたので引用

Slide 10

Slide 10 text

Appendix(2): モデリングの話 (2) kozy4324の解釈 - 手続き型プログラミング - コンピュータが実行すべき命令や手続き(プロシージャ)を順に記述していくことでプログラムを構成 するスタイル - 主に扱う概念とモデリング対象は「命令や手続き」「処理」 - オブジェクト指向プログラミング - オブジェクトとは、プログラミング視点ではデータ構造とその専属手続きを一つにまとめたものを指 しており、分析/設計視点では情報資源とその処理手順を一つにまとめたものを指している。 ...(中 略)... オブジェクトを基礎要素にし、メッセージと形容されるオブジェクト間の相互作用を重視して、ソ フトウェア全体を構築しようとする - 主に扱う概念とモデリング対象は「オブジェクト」 - 関数型プログラミング - 関数を主軸にしたプログラミングを行うスタイルである。ここでの関数は、数学的なものを指し、引数 の値が定まれば結果も定まるという参照透過性を持つものである - 主に扱う概念とモデリング対象は「関数」

Slide 11

Slide 11 text

Appendix(2): モデリングの話 (3) 1〜10 までの整数をすべて足した数を標準出力に出力する(手続き型) - 合計値を持つ変数 sum を 初期値 0 で準備する - 1〜10をループして sum へ順番に足しこむ - sum を出力する

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

Appendix(2): モデリングの話 (4) 1〜10 までの整数をすべて足した数を標準出力に出力する(オブジェクト指向) - 足し込んだ値を保持するオブジェクト - 例えば Accumulator クラス - 値を足し込むメソッド - 結果を取得するメソッド

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

Appendix(2): モデリングの話 (5) 1〜10 までの整数をすべて足した数を標準出力に出力する(関数型) - 累積関数 - 2値を加算する関数 - これらを組み合わせれば良さそう

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

Appendix(2): モデリングの話のオチ - 今回のモブプロでは「オブジェクトのモデリング」にフォーカスしたい - Ruby はマルチパラダイムなコードを記述できる言語(だと思っている) - それぞれのパラダイムのいいとこどりができるといいですね - ではオブジェクト指向パラダイムのいいところって何ですか? - プログラミング初学者の最初の問いに戻ります ...