ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

「標準ソフトウエア工学教科書」を作ってみたいと思います

2011-09-03 18:40:56 | 土日シリーズ
 単に開発方法とか、プロセスとかを並べるんじゃなくって、

   なんで、そういう風になって、
   なにを一貫性として求めていて、
   なにが普遍的に変わらないのか

 そういうのがわかる、開発からそんなにかけ離れていない
(いきなり形式仕様が出てきたり、それ、話しとんでない?みたいなことのないような)
 そんな教科書を作ってみたいと思うんです。




 なんたって、よくスパイラル開発っていうけど、
スパイラルモデルをWikipediaでみても、よくわかんないこと描いてあるし、この文では、反復型と区別&関係がわからないかもしれない・・・

 ってことで、その辺とか・・・

 それと、最近のユーザーエクスペリエンスにおける「戦略・要件・構造・骨格・構成・表層」が、従来のソフトウエア工学とどうかかわってくるのかとか、そんな話も入れてみたいと思います。




 土日に連載します。

P.S

 それにしてもなんだ。Wikipedia

 スパイラルモデルで、提唱者が「バリー・ボーム」になっている

   一方で、

アジャイルソフトウェア開発では「バリー・ベーム」になっている。

バリー・ベームが普通だと思う。

ってか、ベームぐらい、だれか書きなさいよ!
英語のWikipediaだと、ちゃんと写真まで出てくるのに・・・


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

JavaのSwingで、線や図形の部品をつくるには。。。

2008-04-17 15:42:42 | 土日シリーズ

JavaのSwingで、ボタンとかテキストとかはあるけど、
斜線や→、円とかひし形の中に文字とか・・
そーいった、図形を描きたいことがある。

それも、そーいう部品がほしいことがある。
(つまり、単純に全画面に描画するのではなく、
 ボタンのように、addしてつなげていきたい)

で、そのときの方法・・




■しくみ

 JPaneから継承した、そのような部品クラスをつくり、
そこのpaintComponentに、描きたい図形を描く。
 今回は、MyLineという、まんなかに、上からしたまで、線を引く
部品を作ってみましょう。

	public class MyLine extends JPanel {
		public void paintComponent(Graphics g) {
			super.paintComponent(g);

			//	大きさ取得
			Dimension wh = this.getSize();

			//	まんなかに線を引く
			g.drawLine(wh.width/2,0,wh.width/2,wh.height);
		}
	}


 そしたら、その部品を、ぱねるにはっつける
		l1	=	new MyLine();
		l1.setLocation(100,100);
		l1.setSize(100,100);
		f.add(l1);

 こうすれば、描画してくれる。
 リドローとかも、じどうてきにしてくれる。




■サンプル

 実際のコードで関係あるところだけ抜き出したので、
 その際にバグがなかったらこんなかんじで、いけると思う。

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class MyDialog {

	//	画面項目項目
	JFrame			ff;
	Container 		f;
	MyLine			l1;
	
	/*
	 * 	表示
	 */
	public void MyDialog()
	{
		//	フレームを作成する
		ff	=new JFrame("線部品のテスト");
		f = ff.getContentPane();
		ff.setSize(500,450);
		f.setLayout(null);
		
		//	線の部品追加
		l1	=	new MyLine();
		l1.setLocation(100,100);
		l1.setSize(100,100);
		f.add(l1);

		//	表示
		ff.setVisible(true);
	}	

	/*
	 *  まんなかに線を引く
	 * 
	 */
	public class MyLine extends JPanel {
		public void paintComponent(Graphics g) {
			super.paintComponent(g);

			//	大きさ取得
			Dimension wh = this.getSize();

			//	まんなかに線を引く
			g.drawLine(wh.width/2,0,wh.width/2,wh.height);
		}
	}
}

(注意:表示するには、 メインの中で、new MyDialog()とかして、生成させないと、表示されません)




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

いろんなコンピューター言語の覚え方:その13 まとめ(一般化)

2007-12-30 21:36:42 | 土日シリーズ

土日シリーズ「いろんなコンピューター言語の覚え方」
前回までで、いろんなコンピューター言語の覚え方のお話は終わりました。
今回は、このシリーズのまとめとして、結局、一般的に「コンピューター言語」は何を覚えるべきで、どうして、それを覚えれば、言語が覚えれるのか?ということについてです。




■結局、なにを覚えればいいのか?

 今まで覚えてきたことをまとめると、

・定数について
・変数について
  →型について
・関数について
  →型にもとづき、その型にあった処理
  →型から型への変換
  →入出力
・型における比較など

この、定数、変数、関数、比較など(述語とします)の4つをみて、さらに、それらを利用して、条件式(論理式)をもとに、ジャンプ(条件と無条件がある)、繰り返しなどの制御文を考えました。

 そして、プログラムを書く段階になって、Cのように、関数、変数ばーん!と書いていいものもあるし、Javaのように、定数、変数、関数(=メソッド)をクラスというまとまりの中で書くものがありました。つまり、書式というものが重要になってきます。

 ということで、
ある言語を取得するとき
(1)(定数、変数、関数、述語)を、型という切り口で整理しながら学び、
(2)それに論理式をくわえ、制御文とそれ以外の命令について、処理の流れを学び
(3)クラスなどのまとまりを確認しながら、書式について学べばよいということになります。




■なぜ、この順序なのか―言語の一般化

 じつは、このような展開で並んでいるプログラム言語の本は多いです。
 その理由なのですが、これが、形式言語の体系に結びついているからです。

 上記(1)が、プログラム検証論のP55、「形式的理論の語彙」の四重対<変数、定数、関数記号、述語記号>に相当します。

 そして、(1)は、項であり、論理式と合わせて、項と論理式、つまりP59にある<Term(V),Fml(V)>が(2)に相当し、そこに書かれているように、これで、語彙Vから定義される言語となります。

 しかし、言語はこのように定義されても、実際に書くには、どこから実行されるか、どのように関数をまとめるかの知識が必要なので(3)がいることになります。

 実際に言語を比較するには<Term(V),Fml(V)>が重要で、ここを考えないといけないのですが、これだけやっても言語は書けないので、書き方である、構文、つまり(3)から入ります(Hello Worldから)。

 で、逆に言うと、これでかけてしまうと、一般的に学ぶことをしないで、ふつうは参考書を見ながら、必要なところからテキトーに覚えていってしまうので、結局1つの言語を覚えるのに時間がかかるし、ほかの言語との比較が、ある程度覚えないとできないという結果になります。

 これが、いろんなコンピュータ言語を覚えるのに、妨げになってしまっているのかもしれません。




 ということで、このシリーズは、これでおしまい。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

失われた20年-ソフト業界は変わったのか? その25:で、結局

2007-12-29 21:03:47 | 土日シリーズ

20年位前、1980年代終わりごろから、最近まで、ソフト業界とかその周辺の変遷について、特にソフト開発の立場を中心に見て行く、土日シリーズ「失われた20年-ソフト業界は変わったのか?」その第25回目。
 いままでで、その変遷をふりかえってきました。今日は、「で、結局、ソフト業界は変わったのか」ということについてです。




■ネットについては、たしかに変わった
 
 ネットについては、たしかに変わりました。
 さっきのNetscapeのはなしもあるけど、昔は、NetWearのLANやパソコン通信だったのが、インターネットがでてきて、一挙に別次元の世界に変わっていきました。
 このインターネットも今後、どのように変わっていくのか、まだまだ期待がもてそうです。
 (期待しすぎ・・ ^^;)




■開発の分野は?言語は確かにいろいろ出てきたけど

 では開発の分野は?というと、言語は確かにいろいろでてきました。
 COBOL/Fortran/PL1からC、C++、Java、perl,PHP,Ruby、クライアントではjavascriptと
まあ、いろいろ変わってきたのですが、逆な言い方をすると、決定打があるわけではない。
 
 そして、今後も言語が生まれては消えしていくんだろうけど、決定打が出ない理由である、言語として、なにを表現すればOKなのか?という部分がはっきりしていないと思う。これさえ決まってしまえば、それを表現する表現力のある言語を開発すればいい。

 いくつかの言語が必要になるだろうけど、その分野においては、その言語で決まり!っていう形になるだろう。

 で、これをはっきりさせるには、世の中の仕様の大枠を決定してしまえばいいんだろうけど問題は。。




■開発方法論に関しては、発展したのか?

 この世の中の仕様の大枠を決めるための、開発方法論という点について考えると、はたして、発展したのだろうか?

 構造化設計がでて、オブジェクト指向がでて、アスペクトにいき、アジャイルにいった。

 しかし、では、構造化設計やオブジェクト指向は、仕様に対して、どこまで表現でき、それをコンピューター上に、どのように、落とし込むのか、どこまで落とせるのか?を明確にしているとはいいきれない。どのように落とし込むのかについては、たしかに「方法論」というのだから、きまっていなければ話にならない。しかし、どこまで表現できるのか、表現したものが正しいのかという論証は全く行っていない(DFDは多少やっているけど・・)。

 これでは、バグが出てきて、当然だ。なんたって、書いた仕様書やプログラムが正しいことが論証できないのだから。




■この点において、失われた20年といえる。

 この論証は、数学を援用して行う。

 ホーア論理やダイクストラの検証論が、かつて出てきたわけだが、それを応用し、論証していくことになるだろう。

 このプログラムの検証論と開発方法論を結びつけるという分野は、1970年代からいままで、まったくやられていなかった。といっていいだろう。

 つまり、いろんな方法論は出ては消え、出ては消えしてるけど、その方法論を使って、正しいプログラムが書けるという保証もないし、そのためには何をしたらいいかという制約もはっきりさせていないという状態が、20年以上も続いたことになる。

 これじゃあ、バグバグシステムが量産されたって無理はない。なんたって、ちゃんとしたシステムができる(数学的)裏付けはないのだから。

*ただし、ハードのほうでは、すでに数学的検証に基づいた開発は行われている。




■この失われた20年が、今、かわろうとしているのかもしれない。

しかし、この辺の分野、数学的レベルでの論証をベースにおいて、システムを構築していき、裏付けをもって開発し、どこまでの範囲で正しいと言い切れるのかを吟味していく分野は、最近始まろうとしているのかもしれない。

 たとえば、UMLのクラス図を論証していく、兼岩 憲 氏の「UMLクラスダイアグラムの矛盾検証」などがあげられる。

 この辺の数学的論証という立場や、計算理論、計算可能性と、各種開発方法論、言語などが結びついてくると、この言語、方法論では、何が表現できて、表現した内容が正しいのか、正しくないのかについて、体系化・さらには自動化ができてきて、あらたなブレークスルーが起こるであろう。




最後の結論が、論理のジャンプが激しすぎてしまいました。
もう一度、別の機会に説明します(年明けにでも)

ということで、このシリーズは、今回でおしまいです。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

いろんなコンピューター言語の覚え方:その12 プログラムの分割

2007-12-23 11:34:19 | 土日シリーズ

土日シリーズ「いろんなコンピューター言語の覚え方」
前回までで、1ファイルでプログラムを作る場合の話は終わりました。
今回は、複数ファイルに分割して、プログラムを作る場合についてです。




■複数のファイルのわけかた&引用の仕方

 Javaなどは、クラスごとに分けるときまって?ますけど、ほかの言語の場合、(CとかPHPとか)は、関数レベルで、すきに分割できます。

 問題は、分割した時、そのクラスや関数を使いたい場合です。
 これには、import(JAVAの場合)や、include(Cなどの場合)をして利用します(しなくてもできるときがあるが、原則)
 ただし、言語によっては、Cだと、includeしただけでなく、externをしないといけないとか、ほかにも約束事がある言語があります(includeといっても、書き方は言語によって違います)

 また、PHPやPerlでは、includeしたら毎回インクルードする命令と、1回だけインクルードする命令があります。




■変数の利用できる範囲と生存期間

 ここで問題になるのは、変数の利用できる範囲(スコープ)です。
 まあ、関数内に書いたら、関数内、これはいいんですけど、関数の外に書いた場合、そこから下の関数が使える、では、ほかのファイルの関数が使うには?っていう話とかです。Cだとexternですが、ほかの言語だと違います。

 また、その変数の生存期間も問題になります。

 関数が終わったら、消えてしまうのはいいのですが、staticすると、生き残っている(前の値が使える)っていうことに注意です。この場合、どこで初期化されるのか、というのが言語的には問題ですし、テスト的には、前の値がのこってて、ほんとに大丈夫か?排他制御とかする必要ある?ということを考えないといけません。




 ってことで、今回はおしまい。

 次回は総まとめです。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

失われた20年-ソフト業界は変わったのか? その24:現在へ

2007-12-22 23:57:27 | 土日シリーズ

20年位前、1980年代終わりごろから、最近まで、ソフト業界とかその周辺の変遷について、特にソフト開発の立場を中心に見て行く、土日シリーズ「失われた20年-ソフト業界は変わったのか?」その第24回目。前回まで、2003年までをみてきましたが、今回は、その後、最近までの流れを見てみたいと思います。




■開発から、テスト・運用へ

 時代の流れは、開発においては、アジャイルがではじめます。
 JUnitなどを使って、テストファーストの開発・・・というのが、部分部分的に取り入れられ、
 結果として・・・アジャイルじゃないじゃん(^^;)

 って現状なのですが、それにともない、開発より、テスト、運用が注目されるようになってきました。ITILとか。

 あとマネージメントのPMBOKなども、注目されてきましたが、日経オープンシステムが日経システム構築、そしてマネージメント中心?の日経SYSTEMに代わってきたように、開発もマネージメント、PMが注目されるようになってきましたね。

 テストに関しては、妥当性から検証へ興味が移ってきたかもしれません。
 形式仕様が注目されたり




■Web2.0へ

 しかし、それよりも大きな変化はWeb2.0と、それに影響されたAJAX、Flashなどによるマッシュアップによる開発だと思います。

 いままで発信者がコンテンツを作るWeb1.0に対し、受信者の側が参加し、コンテンツを作っていくWeb2.0という考え方が大きく力を持ってきました(って、それ以前から、2ちゃんねるはあったわけで・・あれこそWeb2.0では?という気もするが・・)

 これにともない、ユーザーがいろいろコンテンツを組み合わせるマッシュアップという考えが出てきたのですが、それを逆に考えれば、サーバー側はサービスを提供する、SOAでないといけないことになります。ところが、それ以前のSOAはSOAPが中心だったので、Web2.0のサーバー側が提供するREST型のプログラムとはちょっと違った展開になってしまっている気がします




■PCの高性能化、よりケータイかな?

 PCもクワッドコアでしたっけ?すごいMPUがでてきて、わけわかんないCMしてますけど、PCより、ケータイがいま、力をもってきていて、ネット利用では、PCより、ある意味、上回ってるかもしれません。ケータイに関しては、開発プラットフォームを統合しようとする動きがいろいろ出ています。




ってなかんじですかね。

次回は、総まとめです。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

いろんなコンピューター言語の覚え方:その11 ネットワーク

2007-12-16 14:35:47 | 土日シリーズ

土日シリーズ「いろんなコンピューター言語の覚え方」、第3回に、コンピューター言語の覚え方の手順をかきました。

今回は、そこの「(5)入出力処理」の「ネットワーク」です。




■ソケットが基本で、HTTPアクセス用も

 基本的に、JavaやC,VC++などは、ネットワークプログラム用として、ソケットを利用したプログラムができるような機能を提供しています。
 このソケットプログラムは、サーバー用、クライアント用も普通提供しています。

 さらに、もっと簡単にHTTPプロトコルが使えるように、HTTPアクセス用のプログラム(クライアント側)を用意している言語(というかライブラリ)もあります。

 HTTPアクセス用のプログラムの例にかんしては、Javaのものなんですけど、以下のところ
URLConnectionを使い、POST型で、CGIを呼び出すには
http://www.geocities.jp/xmldtp/jv_post.htm

でも見てもらうこととして(ただし、言語によっては多少違います)、今回は、ソケットを利用する場合について書きます。





■ソケットプログラム(クライアント)

 ソケット版プログラムには、クライアントとサーバー側がありますが、
 まずは、クライアント版。

 Javaの場合のサンプルは、Javaの入出力:Socket通信(クライアント側)

 にありますが、以下の通りになります。

1.ソケットを生成する
2.ソケットのOutputStreamを取り出し、
3.出力する
4.ソケットのInputStreamを取り出し、
5.返り値が帰ってくるまで待ち、
6.帰ってきたら適当に処理して
7.処理が終わったらクローズする

ほかの言語でもやることは、大体同じだと思います。




■ソケットプログラム(サーバー)

 サーバーの場合は、一度に何人も処理しないといけません。
 そこで、Javaの入出力:Socket通信(サーバー側 その3:複数クライアント対応プログラム)。 にあるように、

(1)受け手の入り口となりプログラムでは


1.Threadクラスを生成して
2.渡したい引数があれば、渡して
3.startする(そうすると、スレッドのほうのrunが走る)


をおこない、そこからスレッドによって発生された1つ1つのプログラムでは

1.入力・出力ストリームを取得し
2.読み込み
3.書き出し
4.クローズ

を行います。




■ソケットと、その上と、OSIとの関係

ソケットはOSIによると、5層目のセッションに相当します。
で、その上は、コード変換などを行うプレゼンテーション層、
さらにその上は、アプリケーション層となります。

Javaのソケットプログラムにおいて、Socketの上は、
そのJavaの入出力:Socket通信(サーバー側 その3:複数クライアント対応プログラム)。 のプログラムに

InputStream is1 =socket.getInputStream();
InputStreamReader ir1 = new InputStreamReader(is1);
BufferedReader br1 = new BufferedReader(ir1);

とありますが、socketが5層目、InputStreamReaderは6層目(こいつが、コード変換とかをする)、その上のBufferedReaderとかは、7層目(アプリケーション)になります。

そして、OSIは、下の層がちがっていても、インターフェースが同じなら、上位層は同じものが使えます。

 それを敷衍した形になるのですが、ファイルは、ネットワークではないのでOSIモデルにははいりませんが、まあ、5層目と考えると、ファイルの入出力、FileInputStreamは、SocketInputStreamとおなじインターフェースInputStreamを持っているので(ここで言っているインターフェースはjavaのインターフェースの意味でななく、同じ入出力の切り口を持っているのでという意味)、6層目に相当するInputStreamReaderは、どちらも使えます。
 それが、Javaの入出力:ファイル以外の入力と、入力時、2ないし3つのクラスを重ねる理由。で書いた、

になってくるわけです。




 ソケットの方法は言語(というかライブラリ)によって、差異があります。
 今日の話は、その共通部分的なところになります。
 実際に書く場合には、言語ごとにしらべないといけません。

 ってことで、今日はここまで。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

失われた20年-ソフト業界は変わったのか? その23:2003年ごろ以降(3)言語

2007-12-15 08:56:10 | 土日シリーズ

20年位前、1980年代終わりごろから、最近まで、ソフト業界とかその周辺の変遷について、特にソフト開発の立場を中心に見て行く、土日シリーズ「失われた20年-ソフト業界は変わったのか?」その第23回目。今、2003年ごろから現在までのお話をしていて、今回は、プログラミング言語のお話。




■アプリケーションの言語

 2003年以前では、VB(AccessやExcelのVBA含む)、C、VC++、Javaが多かったでした。
(Delphiもあるか ^^;)

 それに対して、2003年以降からは、.netが出てきたので、VBは以前の書き方とは大きく変わったVB.net(VBAは今も変わっていない)、C#が新たに出てきました。
 CやJavaは、以前と変わらずです。というか、Javaが増えてきました。
 VC++はどーだろー

 Cは、組み込みのほうで、SystemCが注目されているみたい




■Web、ネット系

 サーバーは、ASP,サーブレット(Struts含む)と、Perl,PHP、
 クライアントはJavascript、(VBScriptもある?)、アプレット、Flashとありましたが、

 アプレットは重いので、人気無くなった?
 JavascriptはAJAXとして、今もFlashといっしょに、かなり使われるようになったと思います。

 Curlというのがでてきたけど、どーなんでしょー。

 サーバーに関して、いちばん大きな動きは、Rubyが多くつかわれだした??こと、
 あと、PHPは、4のサポートがもうじき終わる。そのあとのPHP6は??
 PerlはPerl6、ただし、互換性は???




■新たな言語の動き

 最近のソフトウエアテストの注目から、形式仕様言語に注目が集まり、特にVDMが注目(なのかなあ、Zではなくて・・)

 あと、関数型言語もなぜか、最近はやりで、Haskell、OCamlが注目されている(もちろんLispも。でも、Lispは昔ほど人気ないかも?MLは ^^;)。手続き型言語にも、関数型言語で使う、クロージャーの概念が入りつつある。




ってこんなかんじ。こんかいはここまで。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

いろんなコンピューター言語の覚え方:その10 DB

2007-12-09 23:26:18 | 土日シリーズ

土日シリーズ「いろんなコンピューター言語の覚え方」、第3回に、コンピューター言語の覚え方の手順をかきました。

今回は、そこの「(5)入出力処理」の「DB」です。




■実現方法の違い

 DBアクセスは、言語や環境などによって、実現方法が大きくことなります。

 1つめの違いは、

   ・SQLを発行できるかどうか

 です。たしか、昔のオフコン用のCOBOLだと、SQLを発行しないものもあったし、汎用だと、そもそもリレーショナルでない(階層型データベース、親子関係でアクセスする。ちょとXMLのDOMに似た感じ)こともあります。

 で、SQLの場合、

   ・SQL操作をどのように呼び出す(実現する)か

 です。ODBCやJDBC、ODBCをラップする関数、それ以外(AccessVBAなどの場合)とか、いろいろありますが、要は

   ・SQLを発行する前にすべきこと
      ・コネクション
      ・オープン
    などなど・・

   ・SQL実行のためにすべきこと
      ・SQLのステートメント作成
      ・SQL実行

   ・発行した後にすること
      ・値の取得
      ・トランザクション処理
      ・クローズ

 です。このうち、特に注意すべき、値の取得とトランザクション処理について、追加説明します。




■値の取得―カーソル処理

 値の取得なのですが、たいてい、DBからSELECTすると、レコード(セット)単位で取得でき、さらに、そのセットから値をとるようになります。
 このとき、現在、操作対象(値を取得する対象)のレコード(セット)を、カーソルとよび、このカーソルの操作ができるようになっています。

 そして、カーソルのあるレコードから値を取得する方法が用意されています。

 ただし、このカーソルの設定や、値の取得に関して、いろんな便利な関数などがあるおともあります(VBAのFindなど)




■トランザクション処理

 トランザクション処理に関しては、

   ・トランザクションスタート
   ・SQLによる操作
   ・コミットまたはロールバック
   ・トランザクションEnd

 というふうになります。SQLによる操作は、トランザクションありなしで違う場合と、同じ場合どちらもありえます。また、ふつう、トランザクションスタートをしない場合は、オートコミットされるようになってます(トランザクションスタートの処理に、オートコミットOFFも、はいります)

 トランザクション処理は、ライブラリとして用意されている場合(JDBCにはある)と、データベース側でおこない、SQLで設定する方法の2種類ある場合があります(が、JDBCの場合は、JDBCのクラス内メソッドで行なうことが多いと思います)




 一般論的にはこうなのですが、具体的なプログラム方法は、言語や利用するライブラリなどによって違うので、それぞれの言語やライブラリで、上記のことをどのように実現しているのかを確認し、操作するということになります。

 今回のお話は以上です。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

失われた20年-ソフト業界は変わったのか? その22:2003年ごろ以降(2)開発方法論。

2007-12-08 23:57:27 | 土日シリーズ

20年位前、1980年代終わりごろから、最近まで、ソフト業界とかその周辺の変遷について、特にソフト開発の立場を中心に見て行く、土日シリーズ「失われた20年-ソフト業界は変わったのか?」その第22回目。前回から、2003年ごろから現在までのお話です。今回は、EAとかアジャイルとかの開発方法論のお話。




■オブジェクト指向

 現在、いちばんの開発の中心になっている設計方法は、オブジェクト指向でしょう。
 オブジェクト指向は、
アッと驚く達人の技 UMLシステム設計実践技大全
などをはじめ、UMLによる開発方法論+Java(Eclipse)によるコーディング+JUnitによるテスト
という流れが、開発で定着してきます。

 最近は、組み込みでもUMLを応用しようとしています(組み込みが最近あついですね)




■DOA

 一方、DOAに関しては、DOA+とか、IBM DOAなどによって、DFD、ER図を使った形の開発は、いまも脈々と続いています。




■EA

 ここで、アメリカのほうで、政府の情報関係の調達として、EAというのが流行りました。
日本でも、このEAに基づく開発というのが提唱され、電子政府では、この方法を採用されました。。。が、いま、EAを言う人は。。。(^^;)




■アジャイル

 むしろ、その後の開発方法論の中で話題になったのは、アジャイルでした。
 テストファーストに基づく開発方法論は、現在でも流行しています??
 XPなどは紹介されましたが、ペアプログラミングとかは疑問です。




■テストと検証

 最近は、テストや検証が話題になっていて、とくにハードの分野では、論理的な検証が話題です。そんな流れから、形式仕様のVDMとか、関数プログラミングが見直されています。





■そのほかさいきんの動向

で、最近の動向としては、MVCのフレームワークに基づいた、Seasarとか、RoRとか、言語にむすびついたものがおおいです。

 一方、標準化としては、共通フレームが2007年に改定されたり、NTTデータ、富士通、NEC、日立、構造計画研究所、東芝ソリューションで、「実践的アプローチに基づく要求仕様の発注者ビュー検討会」「発注者ビューガイドライン(画面編)」をだすなど、共通化の方向も模索されています。




こんなかんじでしょうかね。。。




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

いろんなコンピューター言語の覚え方:その9 画面

2007-12-02 22:21:12 | 土日シリーズ

土日シリーズ「いろんなコンピューター言語の覚え方」、第3回に、コンピューター言語の覚え方の手順をかきました。

今回は、そこの「(5)入出力処理」の「画面」です。




■コンソール出力とウィンドウ出力

 画面に出力する場合、画面のコマンドラインに出力する、コンソール出力の方法と、ウィンドウを開いて、そこに出す、ウィンドウ出力の方法の2つがあります。




■コンソール出力の場合
 コンソールに出力する場合、入出力の関数は、言語によって違います。
 たいてい、出力は"print"か"printなんとか"ですが・・

 たいてい、Hello Worldの例の中に該当するものがあります。

 また、最近のWeb系の言語においては、このコンソール出力に相当するもので、
HTML画面がかけてしまい、ブラウザから、HTMLを表示することで画面出力に対応する(後述のウィンドウ画面出力の部分がない)というのも多いです。




■ウィンドウ画面出力の場合

 これは、部品が用意されている(テキストエリアとか、ラジオボタンとか)場合と、そういうものがなくて、自分で線とか使って書く場合の2通りあります。

 同じ言語でも二つ(部品を使うバージョンと使わないバーバージョン)を用意している場合があります。
 つまり、ウィンドウ画面出力の場合は、各言語にいくつかのライブラリが用意されていて、それを覚えて、使って出すということになります。

 部品が用意されている場合の画面の手順はこんなかんじ。
・表示領域を作成する(キャンバスとか、色々言い方あり)
・部品を配置する
・部品のイベントを設定する
 (言語によってはできないで、イベント処理を1個の関数でやることアリ)

部品のイベント(イベント設定してある場合その関数。それ以外、呼び出す先が決まってる)
・適宜処理する
・終了の場合は、終了処理
・次画面表示の場合は、次画面表示処理




ということで、画面は各言語によって差があるので、覚えざるを得ません。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

失われた20年-ソフト業界は変わったのか? その21:2003年ごろ以降(1)概要

2007-12-01 23:17:48 | 土日シリーズ

20年位前、1980年代終わりごろから、最近まで、ソフト業界とかその周辺の変遷について、特にソフト開発の立場を中心に見て行く、土日シリーズ「失われた20年-ソフト業界は変わったのか?」その第21回目。やっと、現在まで来ました。今回から数回にわたって、2003年ごろから現在までのお話です。今回は、その概観。




■2003年以降―Webの時代

 2003年以降は、Webによる開発が多くなります。
 Web2.0もそうですけど、その前から、ブラウザを使って画面表示するという開発方法が多くなってきます。そして、オブジェクト指向による開発(Java,C++)も非常に増えてきます。
 この背景として、2003年、4年ごろに、UMLによる設計~Javaによるシステム開発~テストという流れが確立し、オブジェクト指向開発方法論が安定してきたとことも関係すると思います。

 その一方で、電子政府を進める上で、EAというのがでてきましたけど。。
 どーなんすかね?





■Web2.0

 そのWeb自体は、Web2.0っていうコンセプト(バズワード?)が現れ、かなりにぎやかになってきます。ブログとかSNSとかが出てきたりします。
 また、言語も、クライアントはJavascript、サーバーは、サーブレット、PHP,Perl,Rubyと、Web系のいろんな言語で開発されたりします。




■ケータイ

 現時点においては、Web2.0の覇者であるグーグルが、ケータイOSのAndroidを出すなど、ケータイ市場もにぎやかになってきました。




こんなかんじで、次週から、各論に入っていきます。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

いろんなコンピューター言語の覚え方:その8 ファイル

2007-11-25 10:39:25 | 土日シリーズ

土日シリーズ「いろんなコンピューター言語の覚え方」、第3回に、コンピューター言語の覚え方の手順をかきました。
 まとめると、こんなかんじ
(1)処理を開始するところについて、処理が終了するところについて
(2)処理で扱えるデータとその宣言の仕方について
(3)宣言したデータの処理方法
(4)制御文
(5)入出力処理
     ファイル
     画面
     DB
     ネットワーク
(6)複数の処理を作ってまとめる

 現在、(4)まで終わっていますので、(5)からです。




■ファイルの操作手順

 ファイルの操作手順ですが、おおむね、どの言語も、

・オープン(OPEN)する
・読む(READ)、または書く(WRITE)
・終わったらクローズ(CLOSE)する

 というふうに、OPEN,READ,WRITE,CLOSEの4通りのコマンドを持っています。
 ただ、書き方と、ファイル名と、ファイルのオープンモードの指定、OPENのときに渡したなにか(ファイルハンドル、ファイルのオブジェクトなどなど)をREAD,WRITE,CLOSEで指定して、操作対象ファイルがわかるようになるのですが、その何を指定するのかなどなどが違っています。

 なので、上記4つについて、各言語ごとに調べる必要があります。
 
 同じ言語の中でも、何通りかの方法を持っているものもあります。
 たとえば、Cの場合、ファイルハンドルをわたすopen(低レベル)と、ファイルの構造体を渡すfopen(高レベル)の2種類があり、それぞれに、読み・書き・クローズの関数があります)




■読み書きについて

 とくに、読み書き、READとWRITEについてですが、それには、以下の方法があります。

(あ)バイト数を指定して、読み書きするもの
(い)もっと大きなレベル(行ごとなど)で読み書きするもの
(う)レコード構造を元に読み書きするもの

 CやJavaの場合は、(あ)と(い)を明示的に持っています。
 ただし、(あ)と(い)では、操作方法が違います。

 Cの場合、(あ)は、openでファイルハンドルを使う操作、fopenでファイルの構造体を使うもの、どちらもできますが、(い)の操作にあたる、fgetsなどを使うには、fopenでオープンする必要があります。

 Javaの場合は、(あ)、(い)とも、まずファイルクラスFileで、ファイルのオープン・クローズを行い、(あ)の操作を、FileInputStream(読み込み)、FileOutputStream(書き出し)で行い、さらに、(い)の操作を行いたい場合、InputStreamReader,OutputStreamWriterで文字コード変換を行った上で、BufferdReaderなどを使って、1行づつ読めます。

 VBAの場合には、(い)の操作を行うには、Line Input #1とかで読み込み、print #1で書き出しといったかんじですが、(あ)の操作を行うには、indata = Input(サイズ, #1)で読み込み、Put #1で書き出しとかします(なお#1というのは、ファイルの番号なので、#2,#3とか、いろいろ変わっていきます)

 COBOLの場合は、(う)が基本です。
 なお、Javaでは、明示的にはありませんけど、1構造体1レコードとし、その構造体のsizeofをとることで、read,write(fread,fwrite)で似たようなことはできます。




■エラー時の処理

 エラー時の処理が違います。
 エラーコードが返ってきたりするものと、どこかに飛んでしまう(JavaやC++の例外処理とか)場合があります。言語ごとに違います。




■まとめると

 ファイル操作は、各言語ごとに、以下の操作を調べる必要があります。

・オープン
・読み書き
   ・バイト数を指定する読み書き
   ・もっと大きな単位(行など)があるか?
   ・レコードごとに読む方法はあるか?
・クローズ

★エラー時の処理を確認




次回は、画面について



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

失われた20年-ソフト業界は変わったのか? その20:2000年ごろ(5)ネット界の明治維新

2007-11-24 11:03:35 | 土日シリーズ

 20年位前、1980年代終わりごろから、最近まで、ソフト業界とかその周辺の変遷について、特にソフト開発の立場を中心に見て行く、土日シリーズ「失われた20年-ソフト業界は変わったのか?」その第20回目。今回は、2000年前後のインターネット関連について。




■まずは、1997年前後から
 ネットビジネスの大本は、1997年ごろからはじまっています。
 たとえば、楽天の場合は、1997年5月に楽天市場のサービスを開始したそうです。
 まぐまぐは、1997年1月に始まったようですし、(いまのライブドアホールディングスのもととなった)オン・ザ・エッヂは、1996年 4月にできたそうです。




■ビットバレー

 2000年ころに入り、それらの企業が活発化したほか(楽天は1999年に楽天株式会社へ社名変更したのち2000年4月にジャスダック上場)、あらたなベンチャー企業が様々に出てきました。

 これが、渋谷を中心として現れた「ビットバレー」っていうやつだったと思います。

 くわしくはここによくまとまってるみたい
最後に笑うのは誰だ?
渋谷ITベンチャー・ウォーズ Part-1
http://www.shibukei.com/special/147/index.html


 ちなみに、ベンチャー企業の情報を提供する「Venture NOW」っていうメルマガがあるけど、これができたのも2000年ころらしい。ベンチャー情報ではないんだけど、当時、ネット界隈のいろんな情報を出してたメルマガに、RADICA(ラディーカ)っていうのもあったと思う。

 ベンチャー企業ではないが、2ちゃんねるが出たのもこのころ(1999年5月30日)のようです(あめぞうと別のチャンネルで2ちゃんねるなの?)。


 なお、ネットのほうでは、無料でインターネット接続サービスをしてくれる
ライブドア(今のライブドアでも、ホリエモンのライブドアでもないライブドア)が出たのも1999年だったようです。この会社は破たん、のちにホリエモンが買収し、なぜか、ホリエモンのエッジ株式会社(旧オン・ザ・エッジ)の社名にしてしまいます(つまり、もともとのライブドアはつぶれ、オン・ザ・エッジがライブドアになる)。
(無料接続サービスのハイパーネットはこの前に破産しています)

 ちなみに、このころの検索エンジンは、YAHOOも使われていた気もするけど、ウィリアムのいたずらは、アルタビスタを、よく使ってた気がする・・ごめん、記憶がはっきりしない




■その後

 そんなビットバレー、ヴェルファーレでソフトバンク孫正義氏がきて、パーティーやったりしてたんだけど、その後、一部の会社がのこり、多くの会社がつぶれました。


 また、舞台が渋谷から六本木へと移っていきます。

 この当時有名だった人に、深水英一郎氏(まぐまぐの創立メンバーっていう書き方を最近はするのかしら ^^;)がいますが、深水氏は、未来検索ブラジルの代表取締役になったりと、当時の有名だった人が、いろんな分野で出てきたりします。

 でも、千葉麗子さんのヨガは、さすがにぶっ飛びすぎかもしれんが(^^;)
 (ただし、千葉麗子さんは、ヨガをこのころすでに勉強しているようなので、この時代より前の人ですけどね)

 ただ、このころ、ネットが急速に浸透し、その後の社会を方向づけた、ある意味、ネット界の明治維新的な時代だったことは確かだとおもう。




 次回から、2003年以降に入ります。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

失われた20年-ソフト業界は変わったのか? その19:2000年ごろ(4)言語

2007-11-17 19:50:41 | 土日シリーズ

 20年位前、1980年代終わりごろから、最近まで、ソフト業界とかその周辺の変遷について、特にソフト開発の立場を中心に見て行く、土日シリーズ「失われた20年-ソフト業界は変わったのか?」その第19回目。今回は、プログラミング言語について。




■当時の開発言語

 2000年ころになると、もう、COBOLやFORTRANも下火、PL/Iはまず見られなくなります。
 ただし、2000年直前に、2000年問題から、COBOL技術者は注目されます。

 当時Cはよくつかわれていたのですが、それより、VC++やJavaが多くなります。
 VC++は、プログラミングMicrosoft Visual C++ 6.0が、Inside Visual C++にかわり(というか、この本が、Inside VisualC++の後継の本)読まれるようになります(いまでも、VC++の基本書なのかな)

 Javaの基本書は、コアJAVAですよね。ウィリアムのいたずらが持っている本は、英語版なんだけど、1996 Sun Microsystems,Incって表紙の裏の2ページめにある。当時は日本語でてたかな??
 今はコアJavaって、応用編とかもあるから、大変だよね、読むの(^^;)

 で、もちろん、当時も今も、VBならびにVBA(特にAccessVBA)は、盛んだったわけですけどね・・

 そして、C#が出始めます(けど、このころ、本当に出始めたばかりだったとおもう)。
 C#は、.Netとともに出てくるので、.Netもたしかこのころ??

 ってことで、アプリケーションは、VC++とJavaが、流行りはじめました。
 つまり、この時期に、言語に関しては、オブジェクト指向が主流になったということです。




■Webの言語について

 Webに関しては、CGIとして、PerlかASP(Active Server Pageのほう)が中心だったと思います。
 PHPに関しては、2000年に日本PHPユーザー会が発足しています
 ASPは、IISでWebを構築する場合使われましたね(もちろん、今でも)。

 で、ネットのクライアントの言語についてなんですけど、

 JavaScriptは、オンザエッヂの堀江さんが
 ここ http://java-house.jp/ml/archive/j-h/003357.html
で96年に発言しているぐらいですから
(96年のオンザエッヂの堀江さん=>2005年のライブドアのホリエモン)
JavaScriptは盛んになっていました。

VBScriptという選択もなくはなかったけど、JavaScriptのほうがさかんだったかな。

 もちろん、アプレットという選択肢もあったのですが、アプレットを使うサイトは限られていたと思います。Flashに関しては、どーだったかなあ?当時。。。(ごめん、思い出せない)
 XMLを利用したものにかんしては、まだまだといった感じでした。




ってなかんじです。
次回は、このころのネットです。

 


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする