基礎情報技術 ー第2日目ー

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