2008-04-27

Software Engineering

今日はTOEFL受けて、爆死してきました。orz
まだまだ俺の英語レベルなんてちっぽけなもんなんだと実感。

で、その後は上級英語の課題を終えて、ソフトウェア工学の勉強。帰ったらJudeの課題取り掛かろう。ところで、Judeってジュードって読むのか。ユダって読んでた俺涙目w

あとは論理回路の実験レポートもそろそろやらんとな。Basic mathの予習もさらっと終わらせて、回路理論の課題は気合で。言語処理は小テストあるし、構文解析・構文規則んところをもっと深く理解しとこう。その後は、OSをガリガリ勉強!

GWもバリバリ引き篭もって勉強するぜぃ。



----- note@apr 14th -----
Software Engineering@wikipedia

コンピュータのソフトウェアの開発方法を研究対象とする情報工学の一分野である。 具体的には、高度かつ安全なコンピュータのソフトウェアを短期間で設計するための研究などを行なう。難易度の高い大規模ソフトウェアの開発に焦点を当てることが多い。

ソフトウェア工学では、通常、開発対象となるソフトウェアの開発を思いついた時点から、実際に動くソフトウェアが完成し、使用されるまでを、いくつかの工程に分けて考察する (ソフトウェア開発工程) 。これらの工程ごとに典型的な課題が存在し、課題に立ち向かう方法を明確にしようとする。 このため、ソフトウェア工学の対象は広範囲にわたる。

また、他分野とクロスオーバーしていたり、もしくはソフトウェア工学の1分野だったものが独立して別分野を形成したり(例:データベース設計)、別分野で培われた技術や概念がソフトウェア工学の対象となることもある(例:オブジェクト指向技術)。




[ソフトウェア工学]
・Judeのダウンロード(演習のため)
Course Naviから講義資料のダウンロード→プリントアウト



The way of making software
approach management maintenance retirement

ソフトウェア工学の定義
→良いsoftwareを、簡単に作成するための方法論、toolを開発する学問(工学)
e.g. UML,Jude, How to use tool, method

ソフトウェア工学の対象
・大規模なsoftware(10,000 lines)
・多人数で開発するソフトウェア
・開発者と利用者が異なるソフトウェア
・使い捨てでないソフトウェア

ソフトウェア品質特性-ISO/IEC 9126
・機能性
・信頼性 おつりが
・使用性 コンピュータが扱えない人、盲目の人はどうすればよいか?
・効率性 何秒以内に返答が来るか?メモリはいくつあればよいか?
・保守性 
・移植性 違うOSに移植するときどの程度楽になるか?

さらに細かい話 
機能性
合目的性、正確性…など。

[metorics]
coding規約
if(a>b){
↑↓
if(a>b)
{

ELOC = プログラムの全体行数?
ELOC 全部で一万行のプログラムのとき、実際に動くのは5,000行だけかもしれない

10人月
→10人でやれば1ヶ月で終わるソフトウェア。
ソフトウェアの規模を図るときに使う。

ソフトウェアは実世界のシミュレーションである。
従来の機能中心的な開発よりは失敗した。
実世界とのギャップが大きかったからである。
実世界はモノとモノとの関係を中心にして存在している。
よって、モノとモノとの関係を(データ+手続き)中心にした開発の方が
実世界に適している。つまり、開発で失敗しにくくなる。

複雑さに挑戦するための基本手段
本質的なこと
e.g.性別、特徴などは本質的ではない。
→授業を聞いている人の態度が本質にある。他はたいした事ではない。
これは、ソフトウェア制作に関しても同じことが言える。

Stractured Programming
・仕組み
メソッドのようなものを頻繁に書いていく。

オブジェクト指向プログラミング(Object Oriented Programming)
実際にあるもの→インスタンス e.g.一人一人の人間、犬
e.g.両方とも犬でもあるが、違いが生まれるのは名前、種類、体重が違う。
→これを、属性(名前、種類、体重など)が違うという。
属性値=属性の値

例:犬のポチ
・えさを食べる というメソッド
↑パラメータ

ポチとタローの違い→属性値
ポチとタローはクラスが同じ
→クラス=犬

【関連】
色んな関係がある

【仕組み2】
継承:親の特徴を子が受け継ぐ。

カプセル化:要されたメソッドを通してのみ変数にアクセスできる

継承例
SUPRE CLASS1:Pet
SUB CLASS2:dog,cat

多重継承
SUPER CLASS:豚クラス、猪クラス
SUB CLASS:猪豚クラス

どのように継承すればよいかが難しい→JAVAは多重継承を許していない

【抽象クラス】
抽象クラス:インスタンスを持たないクラス
人間クラス
男クラス,女クラス

例:ペットは犬でも猫でもないペットが存在する。
それを表したい場合、ペットクラスのインスタンスを作成するしかない。
男でも女でもない人間はいない→人間クラスのインスタンスはいらない?
→男も女も衣食住は同じメソッド、2度書く手間が省ける。

【override】再定義
例:脅すと逃げるペットが存在する。
猫の逃げ方は少し異なる。
猫クラスのインスタンスに対して脅された場合のメソッドを
書き換える必要がある。
→ペットクラスの脅すメソッドを書き換える

【polymolfism】多相性
例:色んな図形がある。

shape class
draw()
erase()
↑まだ何も定義されていない。

Circle class
円を書くメソッド
円を消すメソッド

square class
四角を書くメソッド
消すメソッド

例:何かを消して、何かを書くメソッドを書いたとする。
書くクラスで定義されたものが適宜作られる。
→何を書くか、何を消すかを動的に決められる。
→呼び出されるまで何が描かれるか分からない。
→いずれ新しいメソッドを加えるときに何も影響が出ない。
→再利用性が高い!

【動的結合】
コンパイル時には、何が描かれるか分からない。
実行時になって分かる。
問題:実行効率の問題
-呼び出し処理にかかる時間
-最適化が出来ない。
java Final修飾詞

polymorphism
オブジェクト指向プログラミング(OOP)の複雑さへの挑戦
・抽象化
-カプセルか
-継承
-polymorphism
-composition?


新しい言語の定義
-smalltalk
--eiffel

手続き型プログラムのオブジェクト指向的解釈
int x;
int y;

x=1;
x=x+3;

これをどのように頭の中で解釈するか?

例:stack program
手続き型とオブジェクト指向型のプログラムの違いについて。
→引数の数。

このような考え方は要求分析や、実装・設計まで幅広くcoverされている。

例:
手続き思考
普通口座開設 2引数
当座預金開設 2引数
普通預金引出 2引数
当座預金引出 2引数

オブジェクト指向で実装する。
誤り例:動作をクラスにする。

来週UMLの話
・機能側面
-use case graph 例:レンタルビデオ屋はどんなシステムが存在するか。
・静的側面 
-class graph
-object graph
…など9種類ある。

再来週はJudeで書き始める。

2 件のコメント:

匿名 さんのコメント...

奇数クラス?
偶数クラスで聞いてないはなしが少しだけある気がする。

いつか土曜日に一緒に昼飯食おう!

yasulab さんのコメント...

深澤先生と本位田先生が講義する奇数だね。

俺は平日も土日も63号館が空いてる日は前日終電まで勉強してるから、昼飯じゃなくても食いに行こうぜw