欢迎访问知识共享园
感到心在流泪
也许我是一个比较爱伤感的男人,也许我经历的和我周围人经历的事确实比较使人会有感触.
现在回顾起来,从小到大,从过去到现在,我走的路还是比较平坦,虽然当中也有些事情在当时看来是比较困难,曾使我一度伤心失望的.但是现在回忆起来都非常模糊不清了,这说明我走的路还是比较好,老天比较公平的,但是,有一件事就是一直都觉得老天对我不够公平,那就是我生长在一个比较贫穷的农村.虽然现在我的月收入虽然已经超过2万元,家里有一对双胞胎宝贝,一家四口生活还算比较幸福,但是我始终认为如果我生活在一个比较富裕的家庭里,也许我生活的会更好.
直到今天,无意中看到了初中好朋友的BLOG才知道,原来我是多么的幸福,上天对我已经是非常好了,在初中好朋友了BLOG里,他写到了纪念他已经离开人世7年的母亲,我看到这篇文章我才知道,自己生活在有母亲,有父亲,兄弟姐妹都有的家庭里已经是多么的幸福,上天对我是多么的好了,我真的不知道,如果我的母亲不在了,我的生活我将会如何度过,我是不是还会有今天这样的幸福生活.
当自己觉得上天对自己多么不公,自己是多么不幸时候,都要想一想比你更不幸的人大有人在时,你就应该满足,你就应该珍惜现在的你,和你的生活.不要在去埋怨,不要再去伤心,要努力才能幸福.
C++によるプログラミング入門4
今日は「オブジェクト指向」という言葉についての一応の前置きです。
プログラミングには「オブジェクト指向」という流儀があります。そして、C++はまさにオブジェクト指向に都合がよい言語なのです。(そのように作られた言語なのです。)(注:「C++はオブジェクト指向に都合がよい」ということを「C++はオブジェクト指向をサポートする」などといいます。初めて聞くと、何のことだかわからなくてびっくりしますよね。)
実は、C++では、オブジェクト指向とはまったく関係ないプログラミング方法も可能なのですが、私の講義ではオブジェクト指向型のプログラミングを考えます。わざわざ「オブジェクト指向」というとものすごいことに聞こえるかもしれませんが、今では普通にある技術のひとつにすぎません。
では、そのオブジェクト指向とはどういうことでしょうか? それは、あれこれ説明を聞くより、C++というすばらしい言語で、まず、実体験してみるのがよいと思うのです。
要するに、私の講義ではオブジェクト指向型のプログラミングをしようと思いますが、オブジェクト指向についての解説をすぐにはしないということになります。ただ、指針は必要でしょうから、言葉だけあげておきます。それは、
「C++でのオブジェクト指向型プログラムとは、クラス、継承、仮想関数を(有効に)使ったプログラムである。」
となります。クラス、継承、仮想関数はこれから説明しますので、安心してください。
なお、もう少し一般的な言い方では、「オブジェクト指向は、クラス、継承、ポリモーフィズム」などとも言います。ポリモーフィズムの意味もあとで説明しますが、C++においてポリモーフィズムを成立させるための中心的な仕組みが仮想関数なのです。
特に「クラス」はオブジェクト指向の出発点(終点ではない)なので、いやがらずについてきてください。(これは特に他の言語をしっている経験者へのコメントです。)
ということで、次回はクラスについてです。
C++によるプログラミング入門3
今回は「コンピュータが名前をきいて、それに答えると、コンピュータがあいさつする」というようなプログラムを考えてみましょう。まず、コンピュータは本当に質問したりしませんから、そのように見せかける必要があります。それは前回やったcoutでできそうです。
しかし、「質問された人」(これからは、「ユーザ」といいます)の入力はどうやって受け取ればよいでしょう。入力を受け取るためには、まず、入力をいれる「いれもの」が必要です。
実は、名前のような文字の列をいれる「いれもの」は
string name;
ここでstringは、「文字列」という意味です。こうすると、「文字列」をいれる「いれもの」であるnameができることになっているのです。stringは文字列を表わすと決まっているので、これを変えることはできません。しかし、nameはプログラマがかってに作る「いれもの」の名前なので、なんでもかまいません。ここでは、名前のいれものなので、nameとしただけです。(注:ちなみに、文字列のいれものとして、配列というものを使う方法もあります。新しいC++では、stringを使う方が一般的ですが、細かい操作を効率よくする場合などには、配列の方法も役に立ちます。これに関しては、旧作のC++入門を参照してください。こちらでは、stringでいきます。また、時間ができたらこちらでも説明するつもりです。)
ただし、stringを使うときには、
#include <string>
という行を上のほうに書くことになっています。これは、「stringを使うために必要な情報を取って来い」という程度の意味ですが、これも前回書いた「おまじない」の一種と考え、最初は気にせず使っていればよいと思います。(下でもう少し説明します。)
ということで、とりあえず、先のプログラムを完成させてみます。考えるのはプログラムの解説を見てからにしてください。
//hello2.cpp
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name;
cout << "こんにちは。私はコンピュータです。" <<endl;
cout << "あなたの名前を入力してください。" <<endl;
cin >> name;
cout<<name<<"さん。よろしく。"<<endl;
}
Fig.1 hello2.exeの実行例
実は、cinは、キーボードを表わしているのです。そして、>>は「押し込め」とか「流し込め」という意味です。したがって、「cin >> name;」は、「キーボードからnameにデータを流し込め」つまり「キーボードからの入力をnameに受け取れ」という意味になるのです。
ついでに、これを年齢もきくプログラムにしてみます。この場合は、年齢(つまり数)をいれる「いれもの」が必要になりますね。初心者にはややこしいですが、コンピュータの世界では、文字列と数は違うのです。さらに、数といってもいろいろあるのですが、年齢なら整数でしょう。整数の「いれもの」は、普通、
int x;
などとして、用意することになっています。ここでintが整数を表し、xが「いれもの」の名前です。「いれもの」の名前はstringのときと同じで自分でかってにつけていいのです。
また、整数の入力をxへ格納するのも、文字列のときと同様に、
cin >> x;
でできます。
以上を使うと、プログラムは次のようになります。このプログラムでは、年齢を入れる「いれもの」をtosiとすることにしました。また、プログラムにコメントをいれる話は前回しましたので、以後、解説も兼ねたコメントをいれることにします。このコメントはあってもなくてもプログラムの実行には何の関係もないのでした。
//hello3.cpp
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name; //名前(文字列)の「いれもの」
int tosi; //年齢(整数)の「いれもの」
cout << "こんにちは。私はコンピュータです。" << endl;
cout << "あなたの名前を入力してください。" << endl;
cin >> name; //名前(文字列)の入力
cout << name << "さん。よろしく。" << endl;
cout << "ところで、" << name << "さん。失礼ですがお年はいくつですか?" << endl;
cout << "(入力はかならず、半角の数字でお願いします。)" << endl;
cin >> tosi; //年齢(整数)の入力
cout << "なるほど。" << tosi << "歳ですか。" << endl;
cout << "私はもうすぐ2歳のマシンです。"<<endl;
}
細かい話を少々します。まず、「Windowsのコマンドプロンプトで日本語が出せない」という質問を受けることがよくあります。設定によってはそうなっているかもしれませんが、コマンドプロンプトの窓を開いた状態で(普通にやるように)「Alt + 半角/全角」を試してみてください。普通はこれで日本語入力モードになると思います。そうならない場合は、パソコンの設定の問題だと思いますので、詳しい人にきいてみてください。
また、日本語(=全角)の数字は数として扱われません。数を入力するときは、(もう一度、日本語入力モードから半角入力モードに戻すなどして、)半角の数字で入力してください。そのことをユーザにわからせるため、年齢の入力の前に「cout << "(入力はかならず、半角の数字でお願いします。)" << endl;」をいれました。
Fig.2 hello3.exeの実行画面
データの「いれもの」は実は業界用語では「変数」といます。(そのくらい知っとるわいと怒ったあなた。まあ、いいじゃないですか。)変数と言う言葉をおぼえてください。「いれもの」つまり変数ははじめに用意してもよいし、途中で用意してもいいのですが、上でははじめに用意してみました。(注:ちなみに、Cでは、ブロックのはじめに定義しないとコンパイルエラーになります。)
最後に、「おまじない」と書いた部分について、説明しましょう。気にならなければ、しばらく気にする必要はありません。気になる場合だけ、以下を読んでください。
まず、「#include <iostream>」や「#include <string>」の意味です。簡単に言うと、「#include」は、「必要なものを持って来い」(インクルードするといいます)という程度の意味です。そして、<iostream>には、入出力に必要な「情報」が入っているのです。たとえば、cout、cin、endlというものの「名前」が、<iostream>に入っているのです。そのため、それらは「#include <iostream>」と書くことで使えるようになるのです。ためしに、「#include <iostream>」を削除したhello3.cppをコンパイルすると、エラーになると思います。(コンパイラによっては、エラーにしないかもしれません。それは、たまたま「プログラマにあまい」コンパイラなのです。)たとえば、Borland C++でコンパイルしたところ、次のようになりました。
Fig.3 「#include <iostream>」を削除するとコンパイル時にエラーになる
これは、「coutなんか知らない」「endlなんか知らない」「cinなんか知らない」という意味なのです。逆に言うと、プログラム中でcoutなどを使うために「#include <iostream>」と書くわけです。「#include <string>」も同様で、これにはstring関連の「情報」が入っているのです。
つまり、C++では、何かを使いたい場合、それに対応した「#include ○○」を書くことになるのです。ただし、ごく基本的なものに関しては、何もインクルードしなくてよいことになっています。たとえば、intは、何もインクルードしなくても使えるのです。こう書くと「何を使いたいときに何をインクルードするかわからない」と思うかもしれません。実際のところ、重要なものは使っているうちに覚えますし、必要ならマニュアル等を見ればよいということになります。この講座では、その都度説明しますので、最初から神経質にならないでください。大丈夫です。^^)
次に「using namespace std;」の意味を簡単に説明しましょう。実は、coutの正式な名前は、std::coutなのです。cin、endlも同様にstd::cin、std::endlです。ここで、stdは言わば苗字のようなものなのです。つまり、std::coutは「std家のcoutさん」みたいなものなのです。(ちなみに、stdは「標準」という意味です。)このように「苗字」を使うのは、名前が同じものがあった場合、それらの区別をするためです。これは、大きなプログラムを書く場合には重要なことです。というのは、プログラムが大きくなれば、似たような名前が増え、整理する必要が出てくるからです。
ただ、初心者が短いプログラムを書いて練習しているうちは、面倒なだけですね。「std::」を省略して書きたいと思うこともあるのです。そのような場合のために、「using namespace std;」があるわけです。これを書いておけば、「std::」を省略できるのです。一応、「using namespace std;」を使わずにhello.cppを書き直したものもお見せしましょう。
//hello.cpp書き換えバージョン
//「using namespace std;」はない
#include <iostream>
int main()
{
std::cout << "hello" << std::endl;
}
この入門講座では、大きいプログラムは書かないので、「using namespace std;」を使うことにします。これをusing宣言などといいます。
それでは、今日はこの辺で。
C++によるプログラミング入門2
この業界の人は大抵ある有名なプログラムからはじめます。私たちもそれにならいましょう。おそらく単独では世界でもっとも有名なプログラム(ただし、バリエーションは少しあります)です。
//hello.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "hello" << endl;
}
もし、すでにC++のコンパイラ(処理系)を持っているなら、上のソースコードを入力(すべて半角英数字です)し、コンパイル+リンクし、実行してみてください(endlの最後の「l」は小文字のエルです)。(Borland C++とVisual C++ .NETの場合の簡単な説明は、付録1を見てください。)実行結果は、画面に「hello」と打ち出されるだけです。なんと、つまらない、、、と思う、思わないは個人の自由ですが、普通はこんなプログラムから入門していくのです。(ちなみに、現在、現役ばりばりのプログラマの多くも、はじめは、こんなプログラムのお世話になっているはずです。)
Fig.1 hello.cppをコンパイル+リンクして作ったhello.exeの実行画面
プログラムの説明をします。
1行目は、「//」ではじまっていますね。「//」ではじまる部分は、行末までがコメントと呼ばれ、プログラムの実行とはなんの関係もないものです。(当然、コメントは削除しても、プログラムの動作に影響はありません。)プログラム中には、このような形でコメントを書くことができるのです。
ここではプログラムの名前hello.cppをコメントとして書いただけです。(注:私の使っている処理系(Borland C++ 、Visual C++)ではC++のソースは「ファイル名.cpp」とします。ここでcppが拡張子と呼ばれるものです。皆さんは自分の処理系が要求する拡張子をつけてください。)このタイプのコメントは「//」ではじまっているので、ほかの行でも「//」を見つけたらこれは、そのあとに書いてあることはただのコメントだと思ってください。
2行目「#include <iostream>」は、「標準的な入出力に関して必要な情報を取って来い」という程度の意味です。プログラムによっては標準的な入出力をしないものもあります。しかし、たいていは標準の入出力をするので、この行は基本的にいつも書くことになります。
3行目「using namespace std;」は、「プログラム中でいろいろなものの名前を簡単に書くため」と思っておいてください。そう言われてもなんのことかわからないと思いますが、とりあえず、「おまじない」と思っておくのがよいと思います。詳しい意味は次回に説明します。とにかく、最初は、「C++のプログラムには(普通)このような行(2行目3行目)が頭にある」と思っておいてください。
4行目は空行ですね。見やすさのために1行空けたのです。
5行目の「int main()」はこれからプログラムの「中心部分(本体)」が始まるという「合図」です。C++のプログラムの中心部分はいつもここから始まります。ここはそういうものなんだと、理解してください。この「int main()」が支配している範囲は「中カッコ」で示されます。それが6行目の「{」と8行目の「}」なのです。
したがって、「プログラム中心部分の中身」は7行目の「cout << "hello" << endl;」だけなのです。coutの前が少しあいているのは見やすさのためです。今回は、この行の意味がわかればよいのです。もう少しですね。
ということで、7行目を説明しましょう。実は、coutは画面を表わし、<<は「そこへ押し込め」などの意味です。したがって、
cout << "文字列"
と書くと、「文字列を画面に押し込め」つまり「文字列を画面に出力せよ」という意味になるのです。
また、endlは「改行」を表わし、「;」は「命令の終わり」を意味します。そのため、
cout << ... << endl;
とすると、「出力の最後に画面に改行を押し込む」つまり「最後に改行する」という意味になるのです。
以上をまとめると、「cout << "hello" << endl;」は、「画面にhelloと出力して、改行せよ」という命令になるのです。Fig.1を見てください。実際、そうなっていますね。
はじめのうちは、あまり「どうしてだろう」と悩まずに多くのことを受け入れてください。そのうちいろいろなことがわかってきます。まず、上のプログラムをなんとか実行してみてください。コンパイル+リンク(ビルドなどということもあります。以下ではかんたんのため「コンパイル」とだけいうことにしますが、これはいつもコンパイル+リンクのことと思ってください。)時にエラーメッセージがでたら、おそらくタイプミスか何かでしょう。例えば、初心者は、よく「;」を忘れます。
エラーが出たらなんとか直してコンパイルしてください。うまくいったら実行です。「hello」とでましたか?もし、うまくいったら、(あまりおもしろいプログラムではありませんが)自分で少しだけ改造したプログラムを書いてみてください。
例えば、こんなのが出来るでしょう。
#include <iostream>
using namespace std;
int main()
{
cout << "俺様はプログラマの卵だ!" << endl;
}
出力する文字列を変えただけです。実際、実行すると「俺様はプログラマの卵だ!」と出力するはずです。ただし、日本語は「俺様はプログラマの卵だ!」だけで、他の部分は半角英数字で入力するのを忘れないでください。特に「"」などを全角文字で書いたりしないように気をつけてください。また、日本語の空白(全角の空白)を「""」の外に書くと、コンパイル時にエラーになります。しかし、これは普通見えない文字なので、初心者は、とても悩むことになります。これも気をつけてください。
以上は、文字を出力するプログラムでしたが、数(字)も同様にできます。しかし、数だけを出力するときには「"」はいりません。この場合、数字はかならず半角で打ってください。また、次のように
//nenrei.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "私は" << 43 << "才です。" << endl;
}
Fig.2 nenrei.exeの実行
今日はこの辺にしましょう。それではまた。
JAVA基礎(クラス-オーバーライドとオーバーロード)
| このページでは、オーバーライドとオーバーロードについて説明を行います。オーバーライドとは、スーパークラスで定義されたメソッドをサブクラスで再定義することを言います。オーバーロードとは、同一クラス内で、メソッド名が同一で引数の型、数、並び順が異なるメソッドを複数定義することを言います。 |
| オーバーライドとはスーパークラスにおいて定義されているインスタンスメソッドを、サブクラス内で再定義することを言います。スーパークラスのメソッドを変更することはできないが、サブクラスに特化した機能を付与する必要がある場合などに使用します。 |
![]() |
| オーバーライドが適用されるのはprivateアクセスレベルを除く、インスタンスメソッドのみです。privateアクセスレベルは同一クラス内のみに参照可能なため、クラスをまたぐオーバーライドの概念には当てはまりません。スーパークラスで定義されているクラスメソッド、メンバ変数をサブクラスで再定義することは隠蔽と言われ、オーバーライドとは区別されます。 オーバーライドを定義する際には以下の規定があります。 | |
| 1. | オーバーライドする側はオーバーライドされる側と戻り型、インスタンスメソッド名、引数型、引数の数が同じでなければなりません。どれか一つでも異なる場合はオーバーライドとは見なされません。 |
![]() | |
| 2. | オーバーライドされる側のインスタンスメソッドに指定されるアクセスレベルより広い範囲を持つアクセスレベルをオーバーライドする側のインスタンスメソッドに付与することはできません。例えばオーバーライドされる側のインスタンスメソッドにprotectedが指定されている場合、オーバーライドする側のインスタンスメソッドにpublicを指定することはできません。 |
| 3. | オーバーライドされる側のインスタンスメソッドに指定されるthrows節以外の例外をオーバーライドする側のインスタンスメソッドに指定することはできません。但し、オーバーライドされる側に指定された例外をより限定する例外をオーバーライドする側に指定することはできます。 |
| 4. | オーバーライドされる側のインスタンスメソッドにfinal修飾子が付与されている場合、そのインスタンスメソッドをオーバーライドすることはできません。 |
| 5. | オーバーライドされる側のインスタンスメソッドにabstract修飾子が付与されている場合、そのメソッドはサブクラスで必ずオーバーライドしなければなりません。オーバーライドしない場合はそのサブクラス全体がabstractクラスになります。 |
【例1】オーバーライドを行った例です。 |
|
【解説1】 | |
| (1). | スーパークラスExClass8で引数に指定された数を10倍にするメソッドmethodAを宣言します。 |
| (2). | サブクラスsubExClass8でスーパークラスのmethodAをオーバーライドし、10倍された数を表示する機能を付与します。 |
| (3). | サブクラスsubExClass8のオブジェクトobjectSubを宣言・生成します。 |
| (4). | objectSubを通し、サブクラスでオーバーライドしたmethodAを呼び出します。 |
| 【実行結果1】 |
|
| 動的束縛とはクラス構成要素(メソッド、メンバ変数など)を呼び出す際、オブジェクト変数に代入されたオブジェクトに基づき構成要素が呼び出されることを言い、静的束縛とはオブジェクト変数のオブジェクト型に基づき構成要素が呼び出されることを言います。そのため、静的束縛はコンパイルする時点で呼び出すオブジェクトが決定されますが、動的束縛はプログラムが実行されるまでどのオブジェクトに基づき呼び出されるかわかりません(条件分岐などで、代入されるオブジェクトが変動する場合があるため)。多くのプログラム言語が静的束縛を実装する中で、動的束縛はJavaの特徴の一つとなっています。 オーバーライドは動的束縛が適用されます。一方、隠蔽は静的束縛が適用されます。以下に例を記載します。 |
| 【例2】オーバーライドを行い、動的束縛が適用される例です。 |
|
【解説2】 | |
| (1). | スーパークラスExClass9で引数に指定された数を1000倍にするメソッドmethodAを宣言します。 |
| (2). | サブクラスsubExClass9でスーパークラスのmethodAをオーバーライドし、引数に指定された数を10倍にするメソッドmethodAを宣言します。 |
| (3). | オブジェクト変数の型がExClass9でsubExClass9クラスのオブジェクトが代入されたobjectSuperを宣言・生成します。 |
| (4). | objectSuperを通し、メソッドmethodAを呼び出します。オーバーライドでは、動的束縛が適用されるため、代入されるオブジェクト(サブクラスsubExClass9のオブジェクト)の構成要素のメソッドが呼び出されます。 |
| 【実行結果2】 |
|
| 【例3】隠蔽を行い、静的束縛が適用される例です。 |
|
【解説3】 | |
| (1). | スーパークラスExClass10で引数に指定された数を1000倍にするメソッドmethodAを宣言します。 |
| (2). | サブクラスsubExClass10でスーパークラスのmethodAを隠蔽し、引数に指定された数を10倍にするメソッドmethodAを宣言します。 |
| (3). | オブジェクト変数の型がExClass10でsubExClass10クラスのオブジェクトが代入されたobjectSuperを宣言・生成します。 |
| (4). | objectSuperを通し、メソッドmethodAを呼び出します。隠蔽では、静的束縛が適用されるため、オブジェクト変数の型のオブジェクト(スーパークラスExClass10のオブジェクト)の構成要素のメソッドが呼び出されます。 |
| 【実行結果3】 |
|
| オーバーロードとは同一クラス内でメソッド名が同一で引数の型、数、並び順が異なるメソッドを複数定義することを言います。 例えば、会員登録を行う機能で、名前と国名を登録させたいとします。国名を入力しなかった会員は国名:日本で登録します。同じ登録を行う機能であるのに、メソッドをtoroku(String name,String country)、torokuJapan(String name)などと作成するするのはあまりきれいなプログラムではありません。この場合、toroku(String name)、toroku(String name,String country)というように同じ名前のメソッドを引数の数を変えて作成します。同じ機能を持つものは同じメソッド名とした方が、プログラムがきれいに見えます。Javaはメソッドの引数の型、数、並び順が異なる場合、それぞれを異なるメソッドとして扱います。これがオーバーロードの機能です。 |
![]() |
| オーバーロードを定義する際には以下の規定があります。 | |
| 1. | 異なるメソッドと認識される部分は、メソッドの次の個所です。「引数の型」、「引数の数」、「引数の並び順」。 |
| 2. | 次の個所が異なっていても異なるメソッドとは認識されません。コンパイルエラーとなります。「戻り型」、「アクセスレベル」、「引数名」、「throws節」。 |
| 【例4】オーバーロードを行った例です。 |
|
【解説4】 | |
| (1). | 引数をnameとcountryの2つ持つメソッドtorokuを宣言します。 |
| (2). | 引数をnameの一つしか持たず、countryに当たる部分は日本を表示するメソッドtorokuを宣言します。 |
| (3). | torokuメソッドを呼び出します。引数が1つしか指定されていないため、②のメソッドが呼び出されます。 |
| 【実行結果4】 |
|
C++入門1
この講座はプログラミングの初心者を対象としてC++を楽しくおぼえていくというものです。ぎちぎちした文法や細かい知識は話しません。そういうことは、 この講座をおえれば、一人でも本を読んでおぼえていけるでしょう。
また、用語はすべてキチンと解説していくと百科事典になってしまうので、ウソにならないように気をつけながら、なるべく簡単な説明で講義を進めていくつもりです。
ところでコンピュータはこのソースの内容を直接理解することはできません。ソースをコンピュータにわかる言葉(バイナリなどといいます)に翻訳する必要があるのです。 この翻訳をコンパイルといい、翻訳するソフトをコンパイラといいます。実はコンパイルするだけでは、まだ、そのプログラムを実行することはできません。そのあと、リンクとよばれる作業が必要です(リンクをしてくれるソフトをリンカといいます)。これは、コンパイルされたプログラムを実際に使える形につなぎあわせるということなのですが、初心者にはこの「リンク」はピンとこないと思います。このような知識はずいぶん先にならないと必要ないので、今は「ソースプログラムを実行可能ファイルにするのに、コンパイルやらリンクやらとよばれる作業がある」とだけ理解すれば十分です。
このコンパイル・リンクは「処理系」などとよばれるソフト(ソフト群)が一発でやってくれますので、気にすることはありません。「コンパイラとリンカ」、あるいは「コンパイラ、リンカ、およびエディタなどを含む統合開発環境を提供するソフト」などを簡単に「処理系」などと言います。また、これらの作業で中心的役割をはたすのはコンパイラなので、全部をひっくるめて「コンパイラ」とよぶ人も多いと思います。厳密には誤りですが、上に書いた事情をわかった上で簡単に言っているのです。
こうしてできあがった実行可能ファイルをコンピュータは理解して、実行してくれるわけです。
以上をまとめると、プログラムを書いて実行するということは
1.ソースを書く
2.コンパイル+リンク
3.実行
ということになります。ここで、2と3は簡単にできます。自分のインストールしたC++処理系(つまりコンパイルやリンクをしてくれるソフト)が、クリックやコマンド一発でやってくれるからです。
Borland C++とVisual C++ .NETを使う場合については、簡単に付録1で説明します。ただ、知っている人が近くにいれば、その人に聞いてみてください。他の開発環境についても同様です。質問を嫌う人もいますが、ソースの入力方法とコンパイル+リンクの簡単な方法なら、相手にもそれほど迷惑にならないはずです。(もちろん、聞くのですから、礼はつくすべきですが、、、。)
私たちがおぼえることは、要するに「どのようにソースプログラムを書くか」ということになるわけです。
Struts(ファイルアップロード)
ここではStrutsでファイルアップロードを行うプログラムを作成する方法を解説します。通常ファイルアップロードを行うプログラムは、複雑なアップロード処理を記述する必要があります。Strutsではこの複雑な処理を行う機能をあらかじめ備えており、プログラマは簡易な処理を記述するだけでファイルアップロードを行うプログラムを作成することができます。 実行環境 |
|
Struts(Validator)
ここではStrutsのValidatorについて解説します。Validatorとは、アクション・フォームBeanに入力された値が指定した条件(必須入力、入力パターンなど)に合致しているかを調べ、合致していない場合はエラーを表示する仕組みです。 実行環境 |
|
Struts(例外処理)
例外が発生した際、標準のエラー画面が表示され画面にプログラムのソースコードが表示されます。これは、セキュリティ上あまり好ましいことではありません。Strutsの例外処理を使用すると、例外が発生した際、指定した例外処理を行い指定したエラー画面を表示します。ここでは、Strutsの例外処理について解説します。 実行環境 |
|
Struts(メッセージ処理)
ここでは、Strutsでのメッセージ管理、メッセージ処理方法について解説します。 実行環境 |
|
メッセージ・リソースファイルの日本語処理
Struts(メッセージ・リソースファイル)
ここでは、Strutsのメッセージ・リソースファイルについて解説します。メッセージ・リソースファイルとは、Struts内で利用されるメッセージを管理するためのファイルです。通常のメッセージ、エラーメッセージ、Formのボタン名などを管理します。 実行環境 |
|
アクション・クラス:LookupDispatchAction
ここでは、Strutsのアクション・クラスの内、LookupDispatchActionクラスについて解説します。 実行環境 |
【exLookupDispatch.jsp】submitボタンを複数持つ、フォーム画面です。 |
アクション・クラス:ForwardAction
ここでは、Strutsのアクション・クラスの内、ForwardActionクラスについて解説します。 実行環境 |
【struts-config.xml】 |
Struts(アクション・クラス)
ここでは、Strutsのアクション・クラスについて解説します。 実行環境 |
|
動的アクション・フォームBean
ここでは、Strutsの動的アクション・フォームBeanの利用方法について解説します。 実行環境 |
【struts-config.xml】
【DynaAction.java】アクション・クラスから動的アクション・フォームBeanのプロパティ値を取得、設定しています。
|
アクション・フォームBeanの日本語処理
ここでは、Strutsのアクション・フォームBeanで、日本語を処理する方法について解説します。 実行環境 |
|
Struts(アクション・フォームBean)
ここでは、Strutsのアクション・フォームBeanについて解説します。 実行環境 |
|
Struts(logicタグライブラリ)
ここでは、Strutsで用意されているカスタムタグライブラリのうち、logicタグライブラリについて解説します。logicタグライブラリには繰返し処理、条件分岐、リダイレクト処理などを行うタグが定義されています。 実行環境 |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
beanタグライブラリ
ここでは、Strutsで用意されているカスタムタグライブラリのうち、beanタグライブラリについて解説します。beanタグライブラリにはBeanのプロパティ、変数、cookie、ヘッダ情報、パラメータ情報などを取得するタグ、取得した情報を表示するタグなどが定義されています。 実行環境 |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Struts(htmlタグライブラリ)
ここでは、Strutsで用意されているカスタムタグライブラリのうち、htmlタグライブラリについて解説します。htmlタグライブラリは<form>、<input>などHTMLタグと同様の動作をするタグを提供します。HTMLタグでも記述できますが、Strutsを使用する場合はなるべくカスタムタグライブラリを使うことが推奨されています。 実行環境 |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Struts(Strutsカスタムタグ)
ここでは、Strutsで用意されているカスタムタグの概要について解説します。 実行環境 |
|
Struts(基本操作)
ここでは、Strutsの基本動作、サンプルプログラムの作成について解説します。 実行環境 |
|
Struts(インストール)
ここでは、Strutsの概要、インストール方法について解説します。 実行環境 |
|
Ant(Tomcat向けタスク)
Tomcatでは、Tomcatを操作できるAntタスクが用意されています。ここではそのAntタスクについて解説します。AntタスクはTomcatのWeb Application Managerの機能を通じてTomcatを操作します。Web Application Managerの詳細についてはJavaの道:Tomcat(Web Application Manager)を参照してください。 実行環境 |
|
Ant(基本操作)
ここでは、Antの基本操作について解説します。build.xmlの作成方法、antコマンドについて解説します。 実行環境 |
|
Ant(インストール)
ここでは、Antの概要、インストール方法について解説します。 実行環境 |
|
Eclipse(CVSの利用)
EclipseにはCVSクライアント機能が備わっています。ここでは、EclipseのCVSクライアント機能の操作方法について解説します。 実行環境 |
|
Eclipse(JUnitの利用)
ここでは、Eclipse上でJUnitを使用する方法について解説します。 実行環境 |
|
Eclipse(Tomcat向けデバッグ)
ここでは、EclipseとEclipseプラグインツールであるLombozを使用して作成されたTomcat向けアプリケーションをEclipse上でデバッグする方法について解説します。この解説ではTomcatをEclipseをインストールしているPCと同じPCにインストールしているものとします。 実行環境 |
|