広告

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■
                      2009年12月02日

    Java総合講座 - 初心者から達人へのパスポート
                  2009年11月開講コース 003号

                                セルゲイ・ランダウ
 バックナンバー: http://www.flsi.co.jp/Java_text/
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■


-------------------------------------------------------
・現在、このメールマガジンは以下の2部構成になっています。
[1] 当初からのコース:毎週日曜の深夜に発行
   これは現在、中級レベルになっています。
[2] 2009年11月開講コース:毎週水曜の深夜に発行
   これは現在、初心者向けのレベルになっています。
・このメールマガジンは、画面を最大化して見てください。
小さな画面で見ていると、不適切な位置で行が切れてしまう
など、問題を起すことがあります。
・このメールマガジンに掲載されているソース・コード及び
文章は特に断らない限り、すべて筆者が著作権を所有してい
ます。また、これらのソース・コードは学習用のためだけに
提供しているものです。
-------------------------------------------------------


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
(2009年11月開講コース)003号
 (当記事はvol.003のリバイバル(revival)版です。)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


========================================================
◆ 01.オブジェクト指向の概念
========================================================

 オブジェクト指向とは、プログラム(ソフトウェア)を作るため
の技法の一つですが、現在はこの技法がソフトウェア開発の主流に
なっています。

 今回は、オブジェクト指向という技術の基本となるいくつかの
概念を解説します。
 
オブジェクト指向の概念はけっして難しいものではありません。

オブジェクト指向の基本概念となる「オブジェクト」、「クラス」、
「継承」、「メッセージ」といった言葉は、オブジェクト指向を学
んだことのない人でもよく耳にしたことがあると思います。

これらの用語は、英語圏の人たちにとっては、一般庶民に話しても
理解してもらえるような平易な言葉が専門用語に昇格しているだけ
なのです。


┌───────────────────────────┐
 オブジェクト(object)
└───────────────────────────┘

 オブジェクト指向の「オブジェクト」(object)という言葉は、
日本語に訳すと「物(もの)」とか「物体」を意味します。
UFO(Unidentified Flying Object:未確認飛行物体)のobject
が物体という意味であることからも、おわかりだと思います。

「物」といっても無生物でも生物でもかまいません。自動車も
飛行機も犬も猫も人間もすべてオブジェクトなのです。この
現実世界のオブジェクトをコンピューター上で表現しようとして
編み出されたのが、オブジェクト指向(Object Oriented)技術で
す。

そして、その技術が一般のソフトウェア開発にも適用できるよう
に発展してきているのです。

 もちろん、現実世界の物の性質や振る舞いをすべてコンピュー
ター上で忠実に表現できるわけではありません。また、そうする
必要もありません。

必要不可欠な部分だけを抽出してコンピューター上で表現すれば
いいのです。

(注記:筆者は今後、コンピューター上で表現されたオブジェク
トも、現実世界の「物」もともに「オブジェクト」と呼んで区別
しないことがありますが、特に混乱が生じることはないと思いま
すので、あらかじめご了承ください。)

 コンピューター上で表現すべき「物」としては、実体のない「物」
もあります。例えば、Windowsのウィンドウもコンピューター上だけ
で表現される実体のない「物」です(目には見えてもウィンドウと
いう物質が存在するわけではありません)。
また、銀行の預金口座のようなものも実体のない「物」です。
(預金通帳のような実体のある物もありますがこれは、預金口座
に「関係する」物であり、預金口座そのものではありません。)

オブジェクト指向では、こういった実体のない抽象的な物もオブ
ジェクトとして取り扱います。

 通常、オブジェクトの性質はプログラム上ではデータとして記述
し、オブジェクトの振る舞い(動作や行動)は手続き(コンピュー
ターに与える指示(命令)の集まり)として記述されます。

このデータのことをオブジェクト指向では「属性」(attribute)と
呼び、振る舞いを表す手続きのことを「メソッド」(method)と呼び
ます。

属性とは、例えば船の場合には船名や排水量、船の現在位置、船の
形を記述する数値群(船の形をコンピューターのディスプレイ上に
グラフィカルに表示する場合に必要)といったデータです。

メソッドとは、船の移動、方向転換などを表現する手続きであり、
この手続きを実行することによって船をディスプレイ上で実際に
移動させ、船の現在位置を変更させることが可能になります。

オブジェクト指向に基づくプログラミングでは、各オブジェクトを
属性(データ)とメソッド(手続き)の組み合わせとして記述する
のです。


┌───────────────────────────┐
 クラス(class)とインスタンス(instance)
└───────────────────────────┘

 オブジェクト指向には「クラス」(class)という概念があります。
オブジェクト指向におけるクラス(class)は、「種類」とか「部類」
という意味です。

クラスという言葉がなじみにくければ、「種類」という言葉に読み
替えるといいかも知れません。

 オブジェクト(物)にはいろいろな種類があります。例えば、
水上を移動し人を乗せる物(オブジェクト)は、船というクラス
(種類)に属するし、家庭でペットとして飼われたりする「ワン」
と吠える生き物(オブジェクト)は、犬と呼ばれるクラス(種類)
に属します。

 一方、具体的な一つ一つのオブジェクトのことを「インスタンス」
(instance)と呼ぶことがあります。インスタンスは、「実例」ある
いは「具体例」という意味です。

例えば、クイーン・エリザベス二世号は船のインスタンス(実例)
であるし、ハチ公は犬のインスタンス(実例)であるといえます。


 クラスは、プログラム上では鋳型のような働きをします。

例えば、船を表現するクラス(鋳型)を一度プログラム上で記述し
ておけば、あとはクイーン・エリザベス二世号であろうとタイタニ
ック号であろうとそのクラス(鋳型)から生成することができます。
それぞれのインスタンスの違いは、属性の値によって設定されます。

例えば、クイーン・エリザベス二世号とタイタニック号とでは名前
や排水量等が異なりますが、これらは名前の属性値や排水量の属性
値として設定されることになります。

 Javaでは、クラスはclass文と呼ばれる構文を使用して記述します。

前回作成したTest1.javaというソース・ファイルの中を確認してく
ださい。
「class Test1」という文字列が書かれていますね。それがclass文
です。

「class Test1」という文は、「ここにTest1という名前のクラスを
定義します」という意味になります。
そして続く{ }の中にクラスの内容(どんな属性やメソッドを持って
いるかということ)を記述します。

つまり、class文とそれに続く{ }の内容がクラスの定義(以後、
「クラス定義」と呼ぶ)になります。

もし現実的なクラスとして、たとえば犬(Dog)のクラスを定義したい
のであれば、「class Dog」というふうに記述します。
(Javaでは犬などの日本の文字をクラスの名前にすることもできます
が、通常はDogなど英数字の名前にします。)

詳しいことはのちほど説明します。


┌───────────────────────────┐
 継承(inheritance)
└───────────────────────────┘

 オブジェクト指向には「継承」(inheritance)と呼ばれる概念が
あります。

 船というクラスは乗り物というクラスを分類したものの一つで
あり、船自身もさらにはタンカー、帆船、水中翼船といったクラス
に細かく分類していくことができます。

そして、細かく分類したときのクラス(複数)と元のクラスの間に
は、共通点があります。例えば、タンカー、帆船、水中翼船には
水に浮かび、水の上を走るという船の特徴や振る舞いを共通に持っ
ています。
このことをオブジェクト指向では、

タンカー、帆船、水中翼船は船の特徴や振る舞いを「継承」している

と表現します。

 また、例えば犬と呼ばれるクラスをさらに細かく分類すると、
ジャーマン・シェパードとかゴールデン・レトリバーとか柴犬とか
いったクラスがあります。
これらはともに犬としての特徴や振る舞いを遺伝的に「継承」しています。

犬というクラス自体もほ乳類と呼ばれるクラスをさらに細かく分類し
たものの一つであり、ほ乳類の遺伝的形質を「継承」しています。

 継承の連鎖の中で、お互いの関係を示す言葉として、継承の元になる
クラスのことを「スーパークラス」(superclass)と言ったり「基底クラス」
(base class)と言ったりすることがあります。
また、継承先のクラスのことを「サブクラス」(subclass)とか
「派生クラス」(derived class:「導出クラス」と訳すこともある)と
呼ぶことがあります。

例えば、タンカーや帆船は船のサブクラスです。
また、乗り物は船のスーパークラスです。

シェパードやレトリバーは犬のサブクラスですし、ほ乳類は犬の
スーパークラスです。

 Javaの場合、スーパークラスはclass文の中でextendsというキーワード
を使って指定されます。たとえば、犬(Dog)というクラスが哺乳類
(Mammal)をスーパークラスとしているのであれば、犬のclass文を
「class Dog extends Mammal」というふうに書くことになります。

 詳しいことは、Javaのプログラミングのお話にはいったときに再度
説明します。

 サブクラスは、プログラム上では、スーパークラスにいくつかの属性
とメソッドが追加あるいは変更された形で記述されます。

スーパークラスに定義されている属性やメソッドは、基本的には
サブクラスでもそのまま使用できるので記述する必要はありません。

サブクラスで記述が必要なのは、スーパークラスに対して追加/変更
された属性やメソッド、つまり、スーパークラスとは異なる属性や
メソッドのみになります。

例えば、帆船の場合には、スーパークラス(船)が持っている属性や
メソッドと異なるのは、帆を記述する属性と帆を広げたり閉じたりする
メソッドですから、帆船を記述するクラス定義ではそれらの属性やメソ
ッドのみを記述すればよいということになります。

 ところで、タンカーや帆船はともに水上を移動するという、船の持つ
振る舞いを継承していますが、この移動の仕方がそれぞれ異なります。

例えば、タンカーはスクリュー・プロペラを使ってエンジンの力で移動
しますが、帆船は帆を使って風力で移動します。

これはプログラム上では、同じ「移動する」(move)という名前のメソッ
ドがクラスによって異なる手続きを実行する場合があることを意味します。

このことを「多様性」(polymorphism(ポリモアフィズム))と呼びます。

多様性を実現するためには、スーパークラスの持つ同名のメソッドを、
各サブクラスにおいて、それぞれ異なるロジックで上書き(override)し
ます。

このように同じ名前の手続き(メソッド)が複数存在し、しかもクラスご
とに異なる意味で使用されることがあるというのも、オブジェクト指向の
大きな特徴です。


┌───────────────────────────┐
 メッセージ(message)
└───────────────────────────┘

 一般のソフトウェア開発にオブジェクト指向技術を適用する場合は、
アプリケーション(アプリケーション・ソフト)を複数のオブジェクト
の集まりとして記述します。

このとき、特徴的なのは、オブジェクトを擬人的に扱うことです。

擬人的というのは、オブジェクトどうしが会話をできるということです。

 まず、アプリケーションに仕事をしてもらうためには、アプリケー
ション内のどれかのオブジェクトにその仕事をしてくれるように話しかけ
なければなりません。

また、その仕事が必ずしもそのオブジェクトだけでこなせるとは限りません。
自分が担当している以外の仕事が含まれている場合は、そのオブジェクトは
さらに別のオブジェクトに話しかけて、処理を依頼することになります。

このように、何らかの処理を依頼するためにオブジェクトに話しかける言葉
(あるいは信号)のことを「メッセージ」(message)と呼んでいます。

オブジェクト指向のアプリケーションでは、アプリケーション内のオブジェ
クトどうしがお互いにメッセージを送り合って、連携プレーを行うことに
よって、全体の仕事をこなすようにしています。


┌───────────────────────────┐
 カプセル化(encapsulation)
└───────────────────────────┘

 このとき、もう一つ注目しなければならないことは、アプリケーション
内では、各々のオブジェクトがそれぞれ異なった仕事を担当していると
いうことです。

オブジェクト指向に基づいてアプリケーションを設計するときには、
アプリケーションを構成するそれぞれのオブジェクトの役割や責任範囲
を明確にしていく必要があります。

異なるオブジェクトが互いに重複した仕事をしたり、役割が不明確に
なったりしないようにするのです。

このときに重要なものとして「カプセル化」(encapsulation)という
概念があります。

カプセル化とは、データ(属性)とそのデータを処理する手続き(メソッド)
をオブジェクトの中に一体化してまとめておき、他のオブジェクトから
は勝手にそのデータにアクセスできないようにすることです。

いわば、オブジェクトのデータがそのオブジェクトというカプセルの
中に閉じ込められたような状態にしておくことです。

そうすることによって、データを読み取ったり、変更したりしたいとき
には、そのデータを保持するオブジェクトに処理を依頼する以外に方法
がないようにしているのです。

そして、オブジェクトに処理を依頼するための唯一の方法が、その
オブジェクトにメッセージを送ることなのです。

メッセージを送られたオブジェクトは、そのメッセージに応対するため
に自分のメソッドを実行し、データの読取や変更を行うようになって
いるのです。

 このカプセル化によって、各オブジェクトの独立性が高まり、同じ
データ処理を必要とする他のアプリケーションでのオブジェクトの
再利用を容易なものとします。
同時にプログラムの保全性を高める働きもしています。


┌───────────────────────────┐
 has-a関係とis-a関係
└───────────────────────────┘

 ところで、世の中に存在するオブジェクトをよく観察してみる
と、通常のオブジェクトは複数のオブジェクトから構成される
複合体になっているのが普通です。

例えば自動車というオブジェクトは、タイヤやボディー、エンジン、
ドア、その他さまざまなオブジェクトから構成されています。

このように、通常、オブジェクトは、複数のオブジェクトから構成
される「複合オブジェクト」(composite object)の形態をとること
が多いのです。

このような複合オブジェクトとその中に含まれる部分のオブジェク
トの関係を「has-a関係」と呼ぶことがあります。

例えば、自動車にはタイヤが含まれているので、自動車とタイヤには
has-a関係があると言えます。
この関係は、「part-of関係」と呼ぶこともあります。

これらの用語は、英語をそのまま使ったものであることは、言うまで
もありません。
例えば、複合オブジェクトAの構成要素としてオブジェクトBが含ま
れる場合、英語で表現すれば、「A has a B.」となりますが、これ
は逆に「B is a part of A.」と表現することもできます。

このように、has-a関係とpart-of関係は同じ関係を主従逆に表現し
ているものです。
 

ところで、複合オブジェクトの中に含まれるオブジェクトは通常、外部
からは隠蔽されます。

例えば、生物のオブジェクトの中には様々な器官のオブジェクトが
含まれますが、これらの器官を外部から直接アクセスすることは
通常できません。

例えば、田中さんの腕の筋肉を外部から直接動かすことはできません。
田中さんに「腕の筋肉を動かして下さい。」とメッセージを送ると、
田中さん本人が自分の体内で腕の筋肉にメッセージ(神経を走る電気
信号)を与えて動かすのです。

自動車を始動するときも、人が直接、自動車のエンジンをかけることは
できません。
人が自動車にメッセージを送ると自動車自身が内部でエンジンをかけ
るのです。
この場合、人が自動車に送るメッセージとは、キーを回すことです。
この方法によって、エンジンをかけるための面倒な操作や自動車の内部
の複雑な仕組みを知らなくても、楽に自動車を始動することができる
のです。


 オブジェクト指向プログラミングにおいても、同様に複合オブジェ
クトの内部のオブジェクトは隠蔽されるのが普通です。

複合オブジェクトの内部のオブジェクト構造やそれらの操作を隠蔽し
て、外部にはその複雑性を隠し、同時にオブジェクトの独立性を高め
るというのもオブジェクト指向の特長の一つなのです。


 has-a関係と紛らわしい用語として「is-a関係」というのもあります。
これは継承の関係を意味します。
これも英語をそのまま使った用語であることは言うまでもありません。

たとえば、シェパードは犬から派生(継承)したクラスですが、この
場合、「シェパードと犬にはis-a関係がある」と表現できます。

つまり、シェパードは犬としての特性や振舞いを継承しており、
「シェパードは犬である。」(A German shepherd is a dog.)と表現
できるわけです。

なお、is-a関係には逆は成り立ちません。例えば、「シェパードは犬で
ある。」は正しくても、その逆の「犬はシェパードである。」は正しく
ありません。
あたりまえだと思われるかも知れませんが、実際にソフトウェア開発
をするときには意外と間違いをおかすことがあるので注意が必要です。

同様に、is-a関係とpart-of関係の違いでも混乱することがありますの
で注意が必要です。

詳しくは、のちほどお話します。


┌───────────────────────────┐
 オブジェクト指向のメリット
└───────────────────────────┘

 それでは、オブジェクト指向に基づいたソフトウェア開発は、従来
のソフトウェア開発に比べてどういうメリットがあるのでしょうか。

以下にオブジェクト指向の主なメリットをあげておきます。


− プログラムの再利用性が高い

 オブジェクトはデータ(属性)とそのデータに対する処理(メソッ
ド)をカプセル化したものです。そのデータ処理に必要な機能は、そ
のオブジェクトの中に備わっています。

したがって、あるデータ処理をするオブジェクトが既に存在する場合、
別のシステムで同じ種類のデータ処理をしたいときには、既存のオブ
ジェクトのクラスをそのまま再利用すればよいということになります。

 また、同じ種類のデータに対して既存のクラスが持つメソッドとは
別の処理ロジックを追加したいときには、そのクラスの派生クラスを
作成し、新しいメソッドを追加するだけで済みます。
これも既存のクラスの再利用の仕方の一つです。

 このようにして、オブジェクト指向に基づくソフトウェア開発を
何度も行っているうちに、再利用可能なクラスがどんどんと蓄積し
ていくことになります。

蓄積したクラスを再利用することによって、ソフトウェア開発の
生産性もどんどんと向上して行くことになります。


− プログラムの保守/変更が容易

 従来のソフトウェア開発手法では、開発後の保守において、プロ
グラムのほんの一部を修正しようとするだけでも他の様々な部分に
影響を与える場合が多く、変更しなければならない個所がやたらに
多くなるのが普通でした。したがって、一般にプログラムの修正や
変更作業は大変なものだったのです。

ところが、オブジェクト指向に基づいたソフトウェア開発では、
カプセル化されたオブジェクトを使用するため、プログラムの変更
による影響範囲が局所的に抑えられるようになっています。

したがって、修正時や仕様変更時のプログラムの変更個所が少なく
て済むようになります。

 このように、オブジェクト指向に基づいたソフトウェア開発の特長
の一つは、変更/修正が容易であるということであり、このことは
保守時のみならず、開発のあらゆる局面で言えることです。

たとえ開発の途中でユーザーの突然の要求変更があったとしても対応
しやすいというのも大きなメリットです。


− 分析・設計が容易

 プログラミングの前には分析・設計という開発工程があるのですが、
従来の分析・設計手法よりもオブジェクト指向に基づく分析・設計の
方が分かり易いものです。

なぜならば、人間は生まれてこのかた様々な「物」を扱って生きてき
ており、オブジェクトを中心にした考え方には慣れているからです。

分かり易いということは、開発や変更が容易であることも意味します。

また、現在のオブジェクト指向技術は、プログラミングに関してだけ
ではなく、分析・設計を含め、開発のあらゆる工程において有用なテ
クニックや手法を提供してくれています。

これらは、ソフトウェア開発を分かり易いものにしてくれると同時に
開発や変更の生産性を向上してくれるのです。


 なお、昔は設計とプログラミングはそれぞれ別の人が担当すること
が多かったのですが、現在では、同一人物(プログラマー)が設計と
プログラミングの両方を行うように変わってきています。

その理由については、のちほど設計の仕方のお話をするときに、説明
いたします。

 この講座では、ずっとあとのほうで分析・設計のやり方についても
説明していきますので、ご安心ください。


============================


いかがでしょう。オブジェクト指向の概念は理解していただけたの
ではないでしょうか。
しかし、このオブジェクト指向の概念のお話は、オブジェクト指向
技術のほんの入り口のお話に過ぎません。

現在のオブジェクト指向技術は、たんに現実のオブジェクト(物)を
コンピューター上で表現するという役割を超越し、むしろソフトウェ
ア開発上の巧妙なテクニックを編み出す原動力として重要な役割を果
たすようになっています。

そして、現在のオブジェクト指向技術に基づくテクニックには実に
さまざまなものがあり、また、常にさまざまな新しい技術が開発され
てきています。

また、オブジェクト指向技術に基づくツールにもさまざまなものが
提供されてきています。
特にJava関連のツールには無料で、かつ、すぐれたものが豊富にあり
ます。

Javaはオブジェクト指向の言語だといわれていますが、オブジェクト
指向のメリットをじゅうぶんに享受するためには、こういったテクニ
ックや技術やツールを使いこなせるように、オブジェクト指向の深い
素養を身につける必要があります。

このメールマガジンでは、これから、Javaのプログラミングの学習を
通して、これらのテクニックや技術やツールも合わせて習得し、深い
素養を身につけられるようにしていきたいと思います。

習得には少し時間がかかりますが、頑張って学んでいけば、楽しい
世界が広がってくること、間違いなしです。



================================================
◆ 02.演習問題
================================================

今回は、オブジェクト指向に関する用語をきちんと理解
しているかどうかの確認になっております。

答は次回のメールマガジンで発表します。

1. オブジェクト指向において、物の種類を意味する言葉
は次のうちのどれですか?
a. クラス  
b. スラク  
c. ラスク  
d. カラス

2.クラスの実例のことを何と言いますか。
a. スタンス  
b. インスタントラーメン 
c. インスタンス 
d. スタントマン

3.「犬は哺乳類の一種である」ということを「犬という
クラスは哺乳類というクラスから○している」というふう
に表現することができます。この○にあてはまる言葉は次
のうちのどれですか?
a. 派出所  
b. 派生  
c. 派遣  
d. 派閥

4.上の表現は「犬は哺乳類の○クラスである」というふう
に言い換えることもできます。この○にあてはまる言葉は次
のうちのどれですか?
a. サバ  
b. サブ  
c. スッパイ  
d. スーパー

5.逆に「哺乳類は犬の○クラスである」という表現もでき
ます。この○にあてはまる言葉は次のうちのどれですか?
a. サバ  
b. サブ  
c. スッパイ  
d. スーパー

6.オブジェクトに何かを依頼するときに送るものは次のうち
のどれですか?
a. 手紙  
b. はがき  
c. メッセージ  
d. プレゼント
(ちなみに、d.を私宛てに送ってくださることには大歓迎です。
 回答とは関係ありませんが。)

7.オブジェクトの振る舞いを表現するものは次のうちのどれ
ですか?
a. メイト  
b. メイド  
c. マイド  
d. メソッド

8.我が家のお隣に住んでいるタマは猫というクラスのインス
タンスです。タマという名前は、オブジェクトの何ですか?
次の選択肢から選びなさい。
a. マッサージ  
b. メッセージ  
c. 属性  
d. 職業

9. is-a関係になっているものは、次のうちのどれですか。
a. 「今日は晴れです。」という文における
  「今日」と「晴れ」の関係
b. 「山田君は優秀です。」という文における
  「山田君」と「優秀」の関係
c. 「この学生は居眠りしています。」という文における
  「学生」と「居眠り」の関係
d. 「鮎は魚です。」という文における
  「鮎」と「魚」の関係

10.以下のclass文のうち、Carのスーパークラスが
Vehicleであることを表しているものはどれですか。
ただし、Java言語として正しいものを選ぶこと。
a. class Car extends Vehicle
b. class Vehicle extends Car
c. Car is a Vehicle.
d. Vehicle is a Car.

11.複合オブジェクトの例を一つあげなさい。


全問正解できなかった人は、復習をしてください。



======================================================
◆ 03.前回の演習問題の答
======================================================

こんにちは。いらっしゃいませ。

というふうに文字列一行になって表示されます。
これは、

System.out.println("なんとかかんとか");

というソース・コードが文字列を出力した後、改行するのに対し、

System.out.print("なんとかかんとか");

というソース・コードは文字列を出力した後、何もしないから
なんですが、詳しいことはまた後ほど学びます。



◆編集後記◆━━━━━━━━━━━━━━━━━━━━━━━━

☆次回は、IDE(統合開発環境)をインターネットからダウン
 ロード(無料)し、インストールします。
 その後、Javaのプログラミングのお話にはいっていきます。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
★ホームページ:
      http://www.flsi.co.jp/Java_text/
★このメールマガジンは
     「まぐまぐ(http://www.mag2.com)」
 を利用して発行しています。
★バックナンバーは
      http://www.flsi.co.jp/Java_text/
 にあります。
★このメールマガジンの登録/解除は下記Webページでできます。
      http://www.mag2.com/m/0000193915.html
★このメールマガジンへの質問は下記Webページにて受け付けて
 います。わからない所がありましたら、どしどしと質問をお寄
 せください。
      http://www.flsi.co.jp/Java_text/
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Copyright (C) 2009 Future Lifestyle Inc. 不許無断複製