基礎情報技術 ー第3日目ー 平成27年4月24日(金) 担当:亀田
© 2015年 東京工科大学 Hiroyuki Kameda 確認 授業で使用した資料は授業終了後に Web(http://kameken.clique.jp/)にて 公開します。 授業中はノートにメモを取ってください。 (キーワードや図だけでも結構です。) レポート課題や小テストがある? © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda それでは始めましょう © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda ウォーミングアップ問題 問題:プログラミングに必要な才能は何? 3つ以上答えなさい。 © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 本講義のポイントの確認 ITのプロになるためには何が必要か? これを考えるための素材をお話します。 © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 前回のポイントの確認 SEの仕事はプログラミングだけではない ソフトウェアのライフサイクル オブジェクト指向 モデリング言語 UML など (これらは回を追ってさらに詳しく話します。) © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 授業概要(確認) ITエンジニアのプロフェッショナルになるためには、プロとしての嗜み(たしなみ)と作法を身につけることも大切である。本授業では、今後プロとしてソフトウェアかかわる人たちにとって避けて通ることのできない嗜み・作法を簡単な演習を通じて紹介するとともに、学生の皆さんにそれらの必要性・重要性を身を持って理解してもらうことを目指す。 具体的には、ソフトウェア開発を上流工程から下流工程へ向けて実際に体験してもらいながら、UML(Unified Modeling Language)やプロジェクト管理等の紹介を行う。 ITシステム ≠ プログラミング であることや、ソフトウェア開発におけるコミュニケーションの意義、プロジェクト管理の重要性についてなど、多くのことを学生の皆さん自らが気づくことを期待する。 © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 今日の内容 イントロの続き プログラミング言語 プログラミング プログラミング工学 ソフトウェア開発 ソフトウェア工学 © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda ソフトウェア開発過程の概要 「ソフトウェアは実際にどのような作業工程を 経て作れば良いのか?」 ということ。 © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda ソフトウェア開発過程の確立 これは未解決問題の1つです! © 2015年 東京工科大学 Hiroyuki Kameda
よいプログラムは どうやって作れば良いのか? “よいプログラム”とはどんなプログラムのことでしょうか? (質的に) こんなプログラムってどうやって作る のだろうか? © 2015年 東京工科大学 Hiroyuki Kameda
よいプログラムは どうやって作れば良いのか? バグのない 動作効率のよい 開発コストがかからない メンテナンスがしやすい 急な修正・変更にも対応できる 拡張性のある 汎用性のある などなど こんなプログラムってどうやって作る のだろうか? © 2015年 東京工科大学 Hiroyuki Kameda
例えば、プログラミング言語 事務処理計算向き言語 科学技術計算向き言語 これにもいろいろな工夫がなされてきた 事務処理計算向き言語 科学技術計算向き言語 人工知能研究向き言語 など (こんな分類のもと、さまざまな言語が考案されてきた。) 疑問:プログラミング言語の分類は今後もこれでいいのだろうか? © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 要求仕様としては… 対象としている処理(機能・サービス)を記述・実現することができなければならない。 人間にとって使いやすく、分かりやすいものであって欲しい。 Fortran:計算式をそのまま書ける Cobol:自然言語に近い表現が可能 Pascal: ____________________ C: ________________________ Java: ______________________ 考えてみてください。 © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda よりよいプログラムをもとめて… 機能の整理 モジュール化/階層化 構造化プログラミング モジュールの独立性 (関数型言語、データ抽象化、 =>オブジェクト指向) ソフトウェア開発法 プログラミング言語側から 開発法側から © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 具体的に見てみよう プログラミングの側面から 開発手法の側面から © 2015年 東京工科大学 Hiroyuki Kameda
工学部情報工学科での講義資料より 担当:亀田弘之(東京工科大学) プログラム工学Ⅲ (ダイジェスト版) 工学部情報工学科での講義資料より 担当:亀田弘之(東京工科大学)
© 2015年 東京工科大学 Hiroyuki Kameda C言語の歴史 1972年 誕生(Dennis M. Ritchie) UNIX開発用言語として使用(K & R 規格) ハードウェアの発達により新しい機能追加 方言(dialect)の発生 1989年 ANSI規格制定(ANSI C89) 1990年 ISO規格制定(ISO C89) 1993年 JIS C制定(JIS X3010-1993) © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 問題 C言語は今後どのような発展の道をたどるか論じなさい。 BASIC、PASCAL、FORTRAN、COBOL、LISP、PROLOGなどの他の言語の歴史を調べ、各言語がどのような背景・目的で誕生し、どのような道をたどっているか論ぜよ。 © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda C言語の特徴 構造化プログラミング向き ハードウェアが透けて見える高水準言語 豊富なデータタイプ コンパクトな言語仕様 関数形式によるモジュール化 移植性が比較的高い © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 構造化プログラミングとは 処理手続きをいくつかの単位に分割し、主となる処理は大まかに記述とし、細部はサブルーチンとして記述していく方法。 エドガー・ダイクストラらによって提唱された。ダイクストラは、大規模化したプログラムを効率よく記述しプログラム設計上のミスが起きにくいようにするための方法論を検討した。 その結果1960年代後半に、構造化定理を証明し、構造化プログラミングを提唱した。 © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 構造化定理 1つの入り口と1つの出口を持つようなプログラムは、「順次・反復・分岐」の3つの基本的な論理構造によって記述できる(Dijikstra)。 順次 反復 分岐 © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 分岐 順次 反復 S = S + 1 X = f(S, 5) S = g(X) + S © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 問題 C言語の特徴を、Javaなどの他の言語と比較して述べよ。 © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 3.プログラムの基本的なパターン #include <stdio.h> main( ) { } 本体 © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 3.プログラムの基本的なパターン #include <stdio.h> main( ) { double fahrenheit; /* 華氏 */ double celsius; /* 摂氏 */ scanf(“%f”, &fahrenheit); celsius = ( fahrenheit – 32 )*5.0/9.0; printf(“%f”, celsius); } © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 3.プログラムの基本的なパターン Cのプリプロセッサ用 #include <stdio.h> main( ) { double fahrenheit; /* 華氏 */ double celsius; /* 摂氏 */ scanf(“%f”, & fahrenheit); celsius = ( fahrenheit – 32 )*5.0/9.0; printf(“%f”, celsius); } Cのプログラム © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 3.プログラムの基本的なパターン #include <stdio.h> main( ) { double fahrenheit; /* 華氏 */ double celsius; /* 摂氏 */ scanf(“%f”, &fahrenheit); celsius = ( fahrenheit – 32 )*5.0/9.0; printf(“%f”, celsius); } © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 中略 © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 5.構造化プログラミングと制御構造 © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 分岐 順次 反復 S = S + 1 X = f(S, 5) S = g(X) + S 構造化プログラミング © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 5.構造化プログラミングと制御構造 順次 反復 for文 while文 do-while文 分岐 goto文 break文 continue文 switch文 & case文 © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda For文 Syntax: for(式1; 式2; 式3) 文 例: for( i=1; i <= 100; i++) s = s + i; s=s+i i++ i<=100 i=1 Flow Chart © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda こんな具合でした... Javaの話と似ていませんでしたか? © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 今度は、… プログラミングの側面から 開発手法の側面から © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda ソフトウェアのライフサイクル(1) 要求分析 設計 プログラミング デバッグ 評価 運用 ⇒再び1へ戻る © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda ソフトウェアのライフサイクル(2) 何(どんなもの)を作ればいいの? どう作ればいの? 作成作業そのもの(デバッグもやりながら) 本当にちゃんとできたのかな? 実際に使おう! ちょっと変更したいな。 © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda ソフトウェア開発モデル ウォーターフォール(water fall)モデル プロトタイピングによるソフトウェア開発 インクリメンタルモデルとイテラティブモデル スパイラルモデル データフローモデル アジャイルモデル モデル駆動型 =>一長一短あり 自主問題: ウォーターフォールモデル , スパイラルモデルおよび モデル駆動型アーキテクチャ(MDA)について調べよ。 © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda ソフトウェア開発過程の確立 現時点では、経験的・体験的にtry! 銀の弾丸はあるのだろうか? © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 問題 「銀の弾丸」とはソフトウェア工学の分野では何を意味しているのでしょうか?調べてみてください。 © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 銀の弾丸とは ソフトウェア開発の現場における諸問題に対して、あまねく通用する万能解決策のこと。 このような「万能な解決策(銀の弾丸)は存在しない」という表現で、ソフトウェア開発の難しさを表現することがある。 © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda 銀の弾丸はなくても… あきらめてはいけない! 1つの提案が「モデリング」とそれを記述・表現するための「モデル記述言語」である。 (以下、その話をしましょう) © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda クールダウン問題 問題:プログラミングに必要な才能は何? 優れた数学者の論理性 エジソンのような工学(エンジニア)の才能 銀行員のような作業の正確さ 推理作家のような発想力 ビジネスマンの実務性 協働作業をいとわない性格 経営的な関心も理解できる能力 その他(具体的に: ) © 2015年 東京工科大学 Hiroyuki Kameda
© 2015年 東京工科大学 Hiroyuki Kameda ウォームアップ問題 “オブジェクト指向”という言葉を見ると何が思い浮かびますか? 思い浮かんだものを順に5つ書き下しなさい。 _____________ © 2015年 東京工科大学 Hiroyuki Kameda