プログラミング入門
担当:浅見 憲司
担当者 自己紹介

• 氏名:浅見 憲司(あざみ けんじ)
• 住まい:埼玉県所沢市
• 職業:フリーランス(SOHO)のSE
• 職歴:(ITエンジニア歴10年ほど)
  ・Web系システム開発
  ・スマートフォンアプリ開発
  ・IT系セミナー講師、記事執筆 など
今回の目的
• プログラミングに必要な
「アルゴリズム」「オブジェクト指向」について学習する

• 「アルゴリズムとは何か?」から始めて、
条件分岐、繰り返しなどを学ぶ

• フローチャートでアルゴリズムを書く


• 「オブジェクト指向プログラミング」の主要な要素を学ぶ
アルゴリズムとは?



   (なんらかの)問題を解くための手順

              (wikipediaより抜粋)
例)数学の公式



                3cm



          4cm

  斜辺(一番長い辺)の長さは何cm?
例)数学の公式

      三平方の定理



   c = b +a
          2    2
例)数学の公式

      三平方の定理



   c = b +a 2     2

      a=3
            を代入
      b=4
例)数学の公式



 斜辺の長さ=   4 +3 =5
          2    2


              よって、5cm。
例)数学の公式



                   329cm


           463cm
  斜辺(一番長い辺)の長さは、約568cm。
例)数学の公式



   329 + 463 ≈ 568
      2     2



 数が大きくなると、
 人間の手で計算するのは、結構大変・・・。
コンピュータを利用する



計算手順を教えれば、
高速に計算を行ってくれる
① 「a」は 3 であると伝える




   a=3
② 「b」は 4 であると伝える




   b=4
③ 公式を伝えて、計算させる




 c = b +a
     2      2
④ cの中身を表示させる


   cを表示




               5
補足)コンピュータは優秀だが…

•   c = b −a
        2      2
                   と入力していたら…

• aやbに間違った数字を入れてしまったら…




      正しい結果が得られない(バグ)
フローチャート

                      はじまり
• アルゴリズム(手順)を図示したもの
                      ○○する

                      △ △する
• 上から下に処理が流れる
(逐次処理)                □ □する


                       おわり
身近な例でフローチャートを描く
例:「お湯を沸かす」というアルゴリズム    はじまり

• やかんを用意する            やかんを用意する

                      やかんに水を入れる
• やかんに水を入れる
                        火をつける

• 火をつける               沸騰するまで待つ

                        火をとめる
• 沸騰するまで待つ


• 火をとめる                 おわり
フローチャート 練習課題
「お茶を煎れる」というアルゴリズム

• 「お湯を沸かす」以降の手順を
                    はじまり
「おわり」まで書いてください。     お湯を沸かす


※    お湯を沸かす          ○○する

このマークは
サブルーチン もしくは メソッド
(手順が別途定義されたもの)
「お茶を煎れる」というアルゴリズム
                  はじまり
• お湯を沸かす
                  お湯を沸かす

• 湯飲みと急須を用意する   湯飲みと急須を用意する

                急須に茶葉を入れる
• 急須に茶葉を入れる
                 急須にお湯を注ぐ
• 急須にお湯を注ぐ
                湯飲みにお茶を注ぐ

• 湯飲みにお茶を注ぐ
                   おわり
条件分岐
• ある状態(条件)のときに処理を変えたり追加したりする



Yes               No
                          <                 >
      うお座か?                   太郎の:次郎の
                              所持金 所持金


 「僕と一緒!」       「残念・・・」
                                    =
 (ディスプレイに出力)
                         次郎がおごる         太郎がおごる

                                  ワリカン
条件分岐
                        Yes
                 季節は春         「あけぼの」
 季節
                No
  春                     Yes
       「あけぼの」    季節は夏         「よる」
  夏
        「よる」    No
                        Yes
  秋
       「ゆうぐれ」    季節は秋         「ゆうぐれ」

  冬             No
       「つとめて」           Yes
                 季節は冬         「つとめて」
練習課題:送料込みの価格


商品の価格が1500円以上なら送料無料、
それ未満なら送料300円がかかるものとし、
送料込みの価格を表示する。
繰り返し処理
• ある処理を何回か繰り返して行う


   ループ        ループ
  継続条件

                     ○○する
  ○○する       ○○する
                            No

                    ○○か?
   ループ       ループ
             継続条件
                    Yes
練習課題:すごろく


サイコロを振り、奇数が出たら、そのまま。
偶数が出たら、1コマ進む。
プレイヤーが「あがったら」、終了。

                    ループ
                 「あがる」まで繰り返す
変数


1つめの値を入力してください。
3
2つめの値を入力してください。
5
2つの和は 8 です。
変数は、ある値の置き場(箱)
            はじまり
 はじまり
                      (キーボード)
            aに入力
   3→a

            bに入力
   5→b
            a + b→c
  a + b→c

                        (ディスプレイ)
            cを出力      (ディスプレイ)
 おわり
            おわり
変数は、ある値の置き場(箱)
三平方の定理         はじまり
c = b +a
    2      2
                aに入力     (キーボード)



                bに入力

               b +a →c
               2   2


                           (ディスプレイ)
               cを出力      (ディスプレイ)



                おわり
例:1から10の和
               0→SUM
                1→N

                ループ
               N>10まで

            SUM + N → SUM

               N+1→N


                ループ



            SUMを出力
練習課題:税込価格


商品の単価(税抜価格)をキーボードから入力。
税込価格を計算する。
商品の税込価格が1500円以上なら送料無料、
それ未満なら送料300円がかかるものとし、
送料込みの価格を表示する。
配列

「点数」という名前の配列

     点数(1)    85
     点数(2)    80   平均点を求める場合、
                   どうするか?
     点数(3)   100
     点数(4)    90
     点数(5)    95
配列
                        0→SUM
                         0→N
「点数」という名前の配列
                         ループ
     点数(1)    85
     点数(2)    80        N+1→N

     点数(3)   100   SUM + 点数(N) → SUM

     点数(4)    90
                         ループ
                        N>=5まで
     点数(5)    95
                      SUM / N → AVG
練習課題:文字列の反転
“abcde”という文字列を”edcba”にする。
(別の配列は用意しない。)

   Str(1)   a      Str(1)   e
   Str(2)   b      Str(2)   d
   Str(3)   c      Str(3)   c
   Str(4)   d      Str(4)   b
   Str(5)   e      Str(5)   a
ヒント:配列要素の交換方法
“abcde”という文字列を”edcba”にする。
(別の配列は用意しない。)

Str(1)   a     Str(1)   e
Str(2)   b     Str(2)   d
                            TEMP → Str(1)
Str(3)   c     Str(3)   c
         d              b   Str(1) → Str(5)
Str(4)         Str(4)
Str(5)   e     Str(5)   a   Str(5) → TEMP
オブジェクト指向の説明の前に
   各自、以下の項目を答えてください。



   • 名前
   • 性別       • 特技
   • 年齢
   • 居住地
   • 所属会社
オブジェクト
 ある人、ある会社などが、ひとつのオブジェクト

例)         Aさん
「Aさん」という   • 性別 =      • パソコンを使う
オブジェクト          “男性”   • プログラムを書く
           • 年齢 =
                “30”
           • 居住地 =
             “埼玉県所沢市”
           • 所属会社 =
               “B株式会社”
オブジェクトが持つ性質
                   「Aさん」という、ひとつのオブジェクト
  Aさんの状態(属性)
               Aさん
               • 性別 =      • パソコンを使う
                    “男性”   • プログラムを書く
 B株式会社         • 年齢 =
(オブジェクト)
                    “30”         Aさんの振る舞い
               • 居住地 =
                 “埼玉県所沢市”
               • 所属会社 =
 オブジェクト「Aさん」は      “B株式会社”
オブジェクト「B株式会社」に
 所属している(関係性)
オブジェクトが持つ性質
• 状態(属性)
    ・・・各オブジェクトが内部で持っているデータ

• 振る舞い
    ・・・各オブジェクトの動作や反応

• 関係性
    ・・・あるオブジェクトと別のオブジェクトとのつながり

• 識別性
    ・・・ひとつのオブジェクトは唯一無二の存在である
クラスとインスタンス
                             インスタンス
クラス                          (「プログラマー」クラスの
(「プログラマー」というクラス)                「Aさん」というインスタンス)

プログラマー                       Aさん
• 性別      • パソコンを使う          • 性別 =        • パソコンを使う
• 年齢      • プログラムを書く              “男性”     • プログラムを書く
• 居住地                        • 年齢 =
• 所属会社                 実体化        “30”
                             • 居住地 =
                               “埼玉県所沢市”
                             • 所属会社 =
                                 “B株式会社”


   特性を定義したものがクラス、
   クラスを実体化したもの(つまり、オブジェクト)がインスタンス
オブジェクト指向プログラミングの特長
① カプセル化
  各オブジェクトは、内部に
  「状態(属性)」と「振る舞い」を持っていて、
  オブジェクトの外からは見えなくしている
                Aさん
                • 性別 =        • パソコンを使う
                     “男性”     • プログラムを書く
                • 年齢 =
                     “30”
                • 居住地 =
                  “埼玉県所沢市”
                • 所属会社 =
                    “B株式会社”
オブジェクト指向プログラミングの特長
① カプセル化
  各オブジェクトは、内部に
  「状態(属性)」と「振る舞い」を持っていて、
  オブジェクトの外からは見えなくしている
                Aさん
                • 性別 =       • パソコンを使う
                     “男性”    • プログラムを書く
                • 年齢 =       • 年齢を言う
                     “30”
                • 居住地 =
   実際は何歳か、は       “埼玉県所沢市”
  言われないとわからない           「年齢を言う」という振る舞いで
                • 所属会社 =
                          実際の年齢がわかる
                    “B株式会社”
オブジェクト指向プログラミングの特長
  ② ポリモーフィズム(多態性)
    あるクラスが、別のあるクラスの性質を受け継ぐ
          ITエンジニア
          • 性別        • パソコンを使う
          • 年齢
親クラス      • 居住地
(スーパークラス) • 所属会社                    同じ「パソコンを使う」でも
                                  クラスによって振る舞い方が違う


子クラス
(サブクラス)   IT営業   システムエンジニア   プログラマー
                             • 性別       • パソコンを使う
                             • 年齢       • プログラムを書く
 ※子クラスは、親クラスの性質を
                             • 居住地
  受け継ぐ⇒「継承」している                       「プログラマー」クラスの
                             • 所属会社
                                        独自の振る舞い
今回の内容
• プログラミングに必要な
「アルゴリズム」「オブジェクト指向」について学習しました

• 「アルゴリズムとは何か?」から始めて、
条件分岐、繰り返しなどを学びました

• フローチャートでアルゴリズムを書きました


• 「オブジェクト指向プログラミング」の主要な要素を学びました

プログラミング入門