今日のお話flute.u-shizuoka-ken.ac.jp/~s-okubo/class/soft2_19/fig/... · 2019-08-31 · 7/43...
Transcript of 今日のお話flute.u-shizuoka-ken.ac.jp/~s-okubo/class/soft2_19/fig/... · 2019-08-31 · 7/43...
1
実践ソフトウェア開発概論II 1日目
2/43
今日のお話
ガイダンス
この講義で行うこと
復習と演習
3/43
はじめに
4/43
自己紹介
名前:大久保 誠也
学位:博士(工学) 2005年6月電気通信大学
趣味
計算機をいじること
特に MSX やSolaris
静岡には2008年から。
印象深いアルゴリズムは…
5/43
授業計画
はじめに
Pythonに入る前に
練習(成績管理)
08/03(土)
Pythonその1
Pythonその2
Pythonその3
08/17(土)
仕様書とは
課題
課題と成果発表
08/24(土)
課題
課題
発表会
09/14(土)
講義(状況次第)
課題
課題と成果発表
08/31(土)
6/43
成績の付け方
毎回の発表により成績をつける。また、最終発表は必須とする。なお、出席回数が足りない場合は不可とする。
講義で使用する資料は、大久保のWebサイトからダウンロードできます(週明け以降)
「静岡県立大学 大久保 講義」で検索してください。
1
7/43
コンピュータ大貧民大会周辺の(混沌とした)開発
8/43
ここでのお話
なんで、このような手法とかを学ぶのかは、他の開発をやってみないとわからないと思います
ここでは、開発手法とか考えずに進んだプロジェクトである「コンピュータ大貧民大会」について見ていきます。
コンセプト(になってしまったもの)
設計は適当でも、
エンジンの馬力だけで空は飛べる
個人技の集合体
9/43
コンピュータ大貧民大会 電通大でUECコンピュータ大貧民大会が開催. トランプゲームの大貧民をプレイするプログラムを持ち
寄って貰い,対戦させる大会.
10/43
サーバー – クライアント システム
011010010010011001
011010010010011001① 送信
クライアント
② 処理
③ 返信
010001100010111001
010001100010111001
サーバーにやって貰おう
サーバー
クライアントは,サーバーに処理を依頼します. サーバーは,クライアントの依頼を受け,結果を返信します.
11/43
システム構成図
大貧民サーバー
• 場の管理• 状況のクライアントへの通知• 提出されたカードの判定
クライアント 1 クライアント 2 クライアント 3
クライアント 4
クライアント 5通信
• カードの選択
• カードの選択
• カードの選択
• カードの選択
• カードの選択
• 場に出ているカード• 場の状況• 自分の手札• 提出するカード
等々
12/43
システム構成図
大貧民クライアント 大貧民サーバー
①場の情報場の管理
②提出カード選択
③カード提出
クライアント 1
提出されたカードの判定
クライアント 2
クライアント 3
クライアント 4
クライアント 5
④すべてのクライアントに結果を通知
次のクライアントのターンに
2
13/43
開発前夜
開発の動機:
西野先生が大貧民をやると言ったから
ディスカッション時の学生の状況
ゲームの大会がどう開かれているかとかは、まったく知らなかった。そして、調べなかった。
「ソケットで通信できるらしいぞ」という知識がある学生が3名ほどいたので、ソケットを用いた通信をすることに決まった
知らなくても、最後には案外なんとかなる14/43
通信部分の開発時
大貧民クライアント 大貧民サーバー
①場の情報場の管理
②提出カード選択
③カード提出
クライアント 1
提出されたカードの判定
クライアント 2
クライアント 3
クライアント 4
クライアント 5
④すべてのクライアントに結果を通知
次のクライアントのターンに
開発中、ここらへんの詳細は、
口約束で決めた
これは混沌を深めた(詳細な仕様は後で書いた)
15/43
関数の説明
void makeJKaidanTable(int tgt_cards[][15], int my_cards[][15])
渡されたカードのテーブルmy_cardsから、階段で出せるかどうかを解析し、 結果をテーブルtgt_cardsに格納する。
そこにソースファイルがあるじゃろ
tgt_cardsは、どういう表現なの?
この大会の参加者は、どの層を目指しているのか16/43
完成したもの
紙のトランプ 対戦環境
デザイナーを入れるという発想はなかった
17/43
Python をはじめる前に
18/43
計算機とは
計算機は、ざっくりと言って、CPUとメモリ、入出力装置からなる。
CPU メモリ入出力装置
計算機
データを保存する
データを処理する
外部とデータを
やりとりする
3
19/43
ビットとバイト
日常、人は、値(数)は10進数で、文字は文字として使用している。
一方、計算機の内部では、すべてのデータは 0,1 で管理されている。0,1 しか取り扱うことができない!
また、計算機は、メモリにデータを蓄えている。単位は、
bit
byte1byte 1bitが8つ集まっている。
1bit 0 もしくは 1 のどちらかを保存。
20/43
メモリとアドレス
基本的に、byte単位で
データを取り扱う。 メモリは、1byteを保存でき
る場所が大量にある。
それぞれの場所には、アドレスがふられている。
0000000100020003000400050006
アドレスがふられている
メモリの概念図
21/43
昔のプログラミング
人間は、曰く人間語を話す。
計算機は2進数しか理解できない!
昔は、人間が計算機に合わせて、2進数を話していた。
00000001000200030004
了解。理解した。
計算機
処理
こういう処理をやりたい
なぁ
人
10001001011010101011101011011011 22/43
上級言語
人間は、2進数を会話するようにできていない!
人間が計算機に指示しやすく、つまり、プログラミングしやすくしたものが、上級言語。
00000001000200030004
了解。理解した。
計算機
処理
こういう処理をやりたい
なぁ
人
printf()get()put()
while()
10001001011010101011101011011011
変換
23/43
種々の上級言語 色々な計算機言語があります。 C言語 :この演習であつかう言語 C++ :C言語の拡張として作られた Java :機種に非依存 BASIC :昔は、パソコンで一番メジャーだった。
:構造化言語でなく、スパゲッティーなソースを:書きがち。
forthや :基本的に、すべての命令はスタックをpostscript :操作する命令。
awkやperl :スクリプト型の言語。手軽に書ける。
等々 他の文法の言語を勉強することは、理解や技量の幅
が広がる(と思います) 24/43
例え話(1) ブロックの組み方をマスターするには?
個々のブロックの形を把握する。
組み上がったブロック例を学ぶ
自分で組んでみる
4
25/43
例え話(2) プログラミングと対応させると......個々のブロックの形を把握する。
→ 個々の命令を理解する。
組み上がったブロック例を学ぶ→ 他のサンプルプログラムを理解する。
自分で組んでみる→ 自分でプログラムを組んでみる。
26/43
何故にプログラミングを学ぶのか
極端な話、単に"既存のものを使うだけ"なら、プログラミングを学ぶ必要は無いかもしれない。
何か、"新しいものを作り上げる"ことをやりたい場合、計算機とプログラミングは、非常に強力なツールに!
既存のものを使用する世界 新しいものを創造する世界
ソフト
知識
手法
ソフト
知識
手法
27/43
他のことへの波及効果
プログラムを勉強すると...
実際にプログラムを書いてみることで、他の講義でやった内容を整理する。
物事を実現するときにに必要な、データ構造とか処理方法とかの考え方を身につける。
手法の理屈だけじゃなくて経験も積む
何をどのように、どういう順番でやればよいかを、整然と考えられるようになる(はず)
28/43
Pythonについて
1991年に初版が公開。
グイド・ヴァンロッサムによって開発された。
スクリプト言語で、以下の特徴を持つ。
オブジェクト指向言語
簡潔に書けるソースファイル
種々のライブラリ。一部はバイナリファイルで高速。
オープンソース
機械学習とかの分野で大流行
29/43
Pythonだと
欠落データがあるcsvファイルを、線形補間したい!
みかん,りんご10,2015,30,50
みかん,りんご10,2015,30,50
#! python
import pandas as pd
df = pd.read_csv('data.csv')df.interpolate(inplace=True)print(df)
#! python
import pandas as pd
df = pd.read_csv('data.csv')df.interpolate(inplace=True)print(df)
Pythonだと5行(コマンドラインだと4行入力)
ここを補間
30/43
練習課題(成績管理)
5
31/43
事務との相談(1)事務 教員
はい
新カリキュラムになって、コース制が始まりました
コースの条件を満たしているか、判定する必要があります。
場合によっては、学生に、なんらかの連絡とかも必要になると思います
32/43
事務との相談(2)事務 教員コース制って、あれですよね。
付け加えるなら、入学年度によって必修科目が異なったりします
情報コースと通信コースがあって
各分野にあるコース必修科目と、各分野の科目から一定の単位数を
取得すると合格っていう
33/43
事務との相談(3)事務 教員で、何か問題が?
うちの教務システムは、コース判定の機能はないです
手作業ですか?
やめましょう
ちなみに、お金はありませんので、システムの拡張とか無理です
34/43
事務との相談(4)事務 教員システムは、何を出力できるんですか
成績一覧の出力となると.....
1行に、[学籍番号,氏名,科目名,科目コード,科目分野,分野コード,成績,単位数, ….]とかをcsvで出せます
これが、1履修ごとにあるので、1人が100科目履修していて、1学年130
人だと、13000行になります
35/43
事務との相談(4)事務 教員分野は、英語とか、コースに関係な
いのもありますね
全然、整理とかされてないんですね
事務(と学生)を満足させなさい
36/43
やること
先ほどの事務とのやりとりを元に、解決策(システム)を提示しなさい。
考えるポイント
事務の台詞から、判定する側の立場として、何をやるべきか考える
判定される側の立場として、何が提供されればよいかを考える
6
37/43
提供される情報
csvファイル
1行が1履修。すべての学生のデータが1ファイル。
各行には、以下の情報が含まれている。
学籍番号、氏名、科目名、科目コード、科目分野、分野コード、成績、単位数
コースの条件
情報と通信の2つのコースがある
情報分野と通信分野があり、一定数の履修が必要
各コースに必修科目がある。入学年度により異なる。
38/43
来週までにやること
次回からは、PCを持参してください。
次回までに、Pythonの3.x系をインストールしておいてください。素のPythonでなく、Anacondaでも良いです。
UTF-8を扱えるテキストエディタも必要です。
本講義で作成するソフトウェアも考えておいてください。
教科書を購入してください。次々回から使用します。
“ビジネスルールを可視化する要件定義の図解術”NTT ソフトウェアイノベーションセンタ、NTTデータ (著)
ISBN-10: 4822271870
7