2011年06月19日

或る無能なPythonistaの憂鬱〜Java学習(4) 約分method追加, override

 前稿では、唐突に約分メソッド「reduce()」のソースを掲載したが、この中身を前掲のBunsuクラスソースのreduce()内に入れても動かない。これは、現時点の分数クラスにはyakusuというメンバー変数を持たせたからである。分数は約分してしまうと見かけ上同じものかどうか判り辛くなってしまうので、人目には元の分子分母が復元出来る方が望ましいことから約分した約数を保存する様にした次第である。また、Javaでは引数の型判定を厳格に行なうので整数はより大きな桁数を保持出来るlongに全て統一している。

 その様な変更を加えると以下のコードとなり、これは実行可能である。以下の2つのコードを同じディレクトリに、それぞれBunsu.javaとtestBunsu.javaとしてクラス名て大文字小文字も一致する形で保存後に、javacでコンパイル後、「java testBunsu」として実行して試て頂きたい。
          Bunsu.java 


public class Bunsu
{
public long bunshi = 0; // 分子 メンバー変数
public long bunbo = 1; // 分母 メンバー変数
public long yakusu = 1; // 約数 メンバー変数

Bunsu() // コンストラクタ
{
this.bunshi = 0;
this.bunbo = 1;
}

Bunsu(long bunshi, long bunbo) // コンストラクタ
{
this.bunshi = bunshi;
this.bunbo = bunbo;
}

/**
* 約分メソッド
*/
public Bunsu reduce()//throws ZeroDivException
{
long min = Math.min(Math.abs(bunshi), Math.abs(bunshi));
for(long i=min; i>1 ; i--)
{
if((bunshi % i ==0) && (bunbo % i ==0))
{
bunshi = bunshi/i;
bunbo = bunbo/i;
yakusu = yakusu*i;
System.out.println("約数: " + yakusu); // 説明用
System.out.println("約数後: " + bunshi + "/" + bunbo); // 説明用
Bunsu b = new Bunsu(bunshi, bunbo);
b.yakusu = yakusu;
return b;
}
}
return this;
}
/**
* 約分メソッド(日本語ローマ字表記)
*/
public Bunsu yakubun() // 約分メソッドの別名の日本語メソッド名を許可
{
return this.reduce();
}
}


          testBunsu.java 


public class testBunsu
{
public static void main(String[] args)
{
Bunsu bun1 = new Bunsu(); // 引数無コンストラクタでの初期化
Bunsu bun2 = new Bunsu(1, 3); // 引数付コンストラクタでの初期化
Bunsu bun3 = new Bunsu(119, 221); // 引数付コンストラクタでの初期化
System.out.println("bin1 = new Bunsu() : " + bun1);
System.out.println("bin2 = new Bunsu(1, 3) : " + bun2);
System.out.println("bin3 = new Bunsu(119, 221) : " + bun3);
System.out.println("");
bun3.yakubun();
System.out.println("bun3.yakubun() = " + bun3);
}
}


ただ、実用にする為の対処をしていないので期待通りの表示にはならないはずだ。独自に作ったBunsuクラスで生成したBunsuオブジェクトは承継するクラスを指定しなかったのでjava.lang.Objectで定義されている「Object」クラスを既定として承継したことになるので、単純に標準出力しようとしても分数が求める表示方法をObjectオブジェクトでは知らないし、当然定義していないので当たり前のことだ。ご覧の通り、オブジェクト名が表示されるのみである。
K:\Blog>javac -encoding utf-8 testBunsu.java

K:\Blog>java testBunsu
bin1 = new Bunsu() : Bunsu@10b30a7
bin2 = new Bunsu(1, 3) : Bunsu@1a758cb
bin3 = new Bunsu(119, 221) : Bunsu@1b67f74

約数: 17
約数後: 7/13
bun3.yakubun() = Bunsu@1b67f74

続きを読む
タグ:java
posted by Mire at 13:54 | Comment(0) | TrackBack(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

2011年06月16日

或る無能なPythonistaの憂鬱〜Java学習(3)オブジェクト指向かも?

 前稿では無能なPythonistaが書いた分数クラスのJavaコードをjavadocにかけて作成した仕様書を掲載させて頂いた。本日はその内容をかいつまんで説明し、何をどんな視点で作ったのかを明らかにしようと思う。

 それでは先ずは、分数は何かと言うことから始めよう。分数は分子分母という整数2つで構成される比率を表す数学上の概念である。そして、その分子分母に同じ数字を乗除したものは等価であり、その等価のもので分子分母が最も少ない数(正しくは絶対値)となる様にすることを約分という。そして、分数どうしの足し算では、分母は分母どうしを乗じたものになり、かつ、分子は相手の分母を分子に乗じたものどうしの和となる。そして、分母にゼロとすると無限大∞となり比率表現としての分数として数の意味をなさなくなる。

等 価 性: a/b = (a×c)/(b×c)
加   算: a/b + c/d = (a×d + c×b)/(b×d)
ゼロで割る: a/0 = ∞

 今回作成したBunsuクラスは、Java学習目的なのでここ迄の分数の性質をオブジェクトとしてJavaコードで描かせて頂いた次第だ。分数の演算にこれ以外に減算や乗除算があるので、ご意思のある方は、その残りを作り込んで試てテスト実行して試るとJava学習の確認になるものと思うので残して置くが次の処理を実装すればよい。

減   算: a/b - c/d = (a×d - c×b) / (b×d)
乗   算: a/b × c/d = (a×c) / (b×d)
除   算: a/b ÷ c/d = (a×d) / (b×c)

 通常であれば、この処理のメソッドをこの構想段階でinterfaceに記述し仕様を明確にし、それをimplements実装する手順を踏むことも出来るが今回はしていない。

 何故かというと、この無能なPythonistaは、日頃は必要となった機能のみを手続き処理として実装して行く手法をとるからである。従って今回もこのコードも当初は、次の様な骨格からスタートさせている。最初に必要性を感じた約分処理の実装が先行した。

class Bunsu
{
public int bunshi; // 分子 メンバー変数
public int bunbo; // 分母 メンバー変数

Bunsu(int bunshi, int bunbo) // コンストラクタ
{
this.bunshi = bunshi;
this.bunbo = bunbo;
}

yakubun() // 約分 インスタンスメソッド
{
//約分の処理をここに記述して行く
}
}

 
  • 分数は分子と分母という2つ整数を持つオブジェクトとして定義出来るのでそれをメンバー変数として記述すると共に、
  • 初期化時に分子分母の値を持つことが出来る様にコンストラクタを記述、
  • 既に基礎的処理方法を別途書いたことがあった約分メソッドを実装した。

    約分処理の方法についてはたけしのコマ大数学科 「除数」1〜7までの数字5桁が4で割切れる確率のreduction(numerator, denominator)関数定義が元になった次第だ。このPythonコードは、数学問題への解答という時間的制約からあらゆる場合を考慮した汎用性より出題のテストに正しく応える程度の思考で良い為、分子分母共に正の数であることを前提にしているし、何より分数クラスのメソッドとしての定義としていない。これは、PythonがJavaの様にクラス強制を強いることがない為に出来る芸当であり、その分臨機応変に対応出来ている次第だ。Pythonの場合、不幸なことに分数クラスは既に「fractions − 有理数」としてライブラリ化されているので改めて作る価値はなく、それには四則演算であれば普通の演算子が使える高度なクラス定義となっている。出来ればJavaでもpythonでの場合同様に __add__を拡張する様な手法で分数の四則演算を可能に出来れば良いのだが、残念なことに、この無能なPythonistaには、そんなSkillはないし、可能なのかどうかも知らない。続きを読む
    タグ:java
  • posted by Mire at 00:50 | Comment(0) | TrackBack(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

    2011年06月15日

    或る無能なPythonistaの憂鬱〜Java学習(2)

     実体感の薄い車にナンバーを付与したりガソリンを入れたりといった例で、「これがクラスだオブジェクトだ。オブジェクト指向はすばらしいんだ。」と言われても、ここの無能なPythonistaとしては、必ずしもクラスとしなくても良い必然性のない機能をクラス化してコーディングし、タイプ数が多くなっていることを上回るメリットを感じることが出来ず、今一つピンと来ないというのが、今の実感である。  Javaは、Cが全てを関数で括ることを強制した文化を発展させ、クラス強制とすることで、あらゆる事象をオブジェクトとしてコーディングし蓄積し再利用性を向上させることに主眼があったのかなと思う。その為、その構造のほとんどはCの文化を踏襲しユーザを確保しつつ、パッケージ管理の厳格化により開発したクラスライブラリの一意性を確保し開発提供側と利用側の安心感を与えた規格は見事だと思う。しかし、その基本構造を実際のコーディングでは、ライブラリの階層を厳格に記述することになり、他言語より遥かに多いタイプ数をついやすことになっている。  しかし、Sunmicrosystemsの優秀な活動によりデファクトスタンダードのシステム言語としての地位を確立しつつ、巨大なクラスライブラリの蓄積とその承継による再利用が当り前のものとして、社会に受け入れられていることは事実としてこの無能なPythonistaも認めざるを得ない。  そこで、本稿では、構造化プログラミング指向でしか発想しない無能なPytohnistaでも、オブジェクト指向の視点からクラス実装が好ましいと思えるJava学習時の例題として実体感のあるものを揚げ、そに可能な限りの基本学習事項を盛込み、学習の整理をして試た。本日は、そんな無能なPythonistaがコーディングしたJavaコードからjavadocで生成した仕様書を先ずは掲載して置くことにする。  尚、コード自体はまだ書き殴りレベルなので、仕様書の細部は変更がある筈なので、暫時修正していくが、あくまで学習目的の為、完全に完成させるつもりはない。良かったら、1つの教材として、当方のコードは無視して1からコーディングして利用頂いても良いかと思う。続きを読む
    タグ:java
    posted by Mire at 01:03 | Comment(0) | TrackBack(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

    2011年06月13日

    或る無能なPythonistaの憂鬱〜曖昧なソース配置に嵌まる

     まぁ、恐らく受身で学習時のサンプルを入力しているときに起きることで本番では起きないと思う(と言うより、そうあって欲しい)ことだが、javaパッケージの同一クラス名のimport時の「 …の参照はあいまいです。B の クラス B.ExPackage と A の クラス A.ExPackage が両方適合します。」というコンパイルエラーを確認する為に手打ちして試たところ、期待とは異なり、

    ExPackage2.java:6: ExPackage にアクセスできません。
    クラスファイル .\ExPackage.class は不正です。
    クラスファイル PackageB.ExPackage に不正なクラスがあります。
    削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。
    ExPackage object1 = new ExPackage(); //(7)
    ^
    エラー 1 個
    と言うお叱りを引出してしまった。落ち着いて読めばその通りなのだが、手打ちしたパッケージのソースをチェックするも差は見つからず、出典よりのコピペでテストするがjavacの怒りは収まらず、新規のディレクトリで試すと元々期待通りの「曖昧」のメッセージがでるではないか? そこでdiff -duwr ディレクトリ1 ディレクトリ2 として差分チェックしたが当り前だか差が見当たらない。このままでは気持ちの上ではホラー映画になってしまうので、更に新たなディレクトリ上で手打ちで再挑戦するとあっさり「曖昧」と言うれる。

     まあ、結局は文字通り素直に読めば在ってはならぬパッケージファイルをパッケージルートに置いていたからこそのお叱りだった訳で、エディタの名前を付けて保存時に間違えてパッケージルートにもjavacソースを保存し、コンパイルでそのclassファイル迄作ってしまっていたから起きたことであった。パッケージと同じソースファイルとそのclassを削除するとすんなりと「曖昧」だと言われる。

     javaのパッケージ管理では曖昧さも度を超えると「曖昧」とすら言ってくれないのだ。いやぁ、言語習得には慣れが大切とは言っても、「もっと優しくして」と言いたくなった本日であった。はいこれは只のボヤキです。忘れて下され。
    posted by Mire at 23:22 | Comment(0) | TrackBack(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

    2011年06月12日

    Willcom W-ZERO3 WS007SH 画面表示が出ない!!

     最近、愛用のSharp製のWindowsMobile機であるWillcom W-ZERO3 WS007SHの画面操作が出来なくなる等不具合が重なり、おかしいなと思い、バックアップ作業何ぞだけは済ませていたのだが、何と画面表示が全く出来なくなってしまった。画面のタッチ操作が出来ないだけなら、一部のソフトを除き、Crtlキーを絡めたキー操作である程度凌げることが苦労して判った矢先に全くの災難である。
     思いとしては技術的に興味のあるAndroid機に乗換えたいところだが、手元不如意につき、まだ暫くは日本におけるかつて唯一のスマホであったこのW-ZERO3を使っていたかった。こうなれば、無理してでも買い替えたいところだが同番移行の蚊帳の外にあるWillcomは他の携帯とは事情が異なる。そこでWillcomがAndroid機を出す迄もう少し待ちたかった訳だが、まだその気はなさそうである。
     元々、購入の動機はInrernetExploreが入っているとの触込みにWeb頁がモバイルで不自由なく読めるだろうと錯誤したことにあったので、機能的にはなんの未練はないのだが、同番移行が出来ないとなると、一定期間並行して契約保持する必要もあるのでとても金銭面で頭が痛いところだ。それで、本日、ヨドバシでも行って試ようと思ったのだが、中のデータが気になり思い留まった。

     先ずは、PCとUSB接続してVista機側の「モバイルセンター」でつなぎ、全Backupの機能を探すが見当たらない。仕方がないので、ExploreのPDAから、PCに接続しているHDDにファイルコピーを試みた。残念ながら使用中のファイルはことごとく拒否されてしまうが、出来るだけ個別でコピーをとった。これは修理とした場合の対処だが、極力元通りの状態をイメージで残すことにあり、万一復元出来ない時の参照用である。1つのファイルがあることで助かることもあるからだ。コインで大半が支弁出来るなら修理することになるので、必要な作業である。
     無論、ActivSyncでつながった訳なので、同期内容も見直し従来のスケジュール管理とアドレス帳以外にもチェックを入れPC側へ情報を保管させた。どう見るのかはまだ知らない(笑)。

     そうこうしていると、もうお出かけする時間でなくなったので、明日行くことにして、さらに、全体のバックアップ方法がないのか調べていたがありそうでなかなか無い。そこで発想の転換をし、VNCでPCからPDA画面が覗けないか、そして操作が出来ないのか? そこで本格的なバックアップ方法があればなんとかなるのではないか? との思いからである。
     そこで、Googleで検索を試してみると「VNC SERVER WINDOWS MOBLILE」で検索すると有難いことに人力検索はてな「こんにちは。WindowsCEの端末の画面をWindowsXPのPCに写したいのですが方...」に有難いことに http://www.mymobiler.com/ のリンクがありそれをクリックし調べて試た。

     これはフリーなのでスパイウエアの尾ひれが付くこと覚悟しつつ、DLして日頃のリアルタイム検索にSpybot-S&D と ClamWinで チェックした上でInstallした次第だ。まあ、その後で「mymobiler」で検索したところ窓の杜に「W-ZERO3をWindows搭載パソコンから遠隔操作する「My Mobiler」 」と言う紹介記事があることが判り、取敢えず安心した次第だ。ただ、Install中や操作中にセキュリティ警告が出るがセキュリティ解除はしなかったことだけは敢えて書き遺して置く。尚、この窓の杜での紹介では、 http://www.mtux.com/ がURLとして掲載されているが、 http://www.mymobiler.com/ と全く同じ頁が表示される。ping でIPアドレスは同じであることも確認出来るので同一のソフトであるので、その面だけは安心して欲しい。

     使い方は極めて簡単で、Install時と同様に、PCとUSB接続した状態で、「MyMobiler」のショートカットをクリックするだけだ。後の操作は端末側でもPCのマウスクリックでも可能なので、画面表示が出来なくなった当方にとってはとても助かった。

     残念ながら、完全バックアップの方法は端末側にもない様だったが、それが判っただけでも安心した。同時に、作業中電話がかかって来たが、PC画面を見ながら受信が出来た。もし、常にノートPCも持ち歩くのであれば、壊れたままでも用を足す様になったのである。

     で、どうするかであるが、明日、修理か乗換かをWillcomの窓口で色々と聞いてから決めるつもりだ。既にスマホとしては陳腐化しているとはいえ3年でお蔵になるとは耐久性がない設計なんだねぇ。修理代10コインで済ませてよぉ、シャープさん、お願い!!
    posted by Mire at 00:02 | Comment(0) | TrackBack(0) | Windows Mobile | このブログの読者になる | 更新情報をチェックする

    2011年06月09日

    或る無能なPythonistaの憂鬱〜Javaの文字コードOS依存を噛締める

     実を言うと、この投稿には前項でいちゃもん付けた学習用サンプルに応えようと思っていたのだが、その前にJavaDocで引っ掛かってしまった。JavaDocは外付けのユーディリティなので、「好きに改造しろよ」という段階の議論があったので、暫し足踏みしてしまったので、敢えて一稿程の蛇足を付け加えることにした。結論からすると特段の改造することなくオプション指定を適切に行なえば何の労もなく、Vista環境でUTF-8のjavaソースコードからUTF-8のHTMLを吐かせることが出来たので、それ程時間の浪費はしなかったが、この無能なPythonistaが割と簡単に判ったことが、経験者の中には出来ないと思われていることにに対し憂いを感じたこともあるが、何より初心者が悩むポイントなので、文字コードの扱いについて、ここに書き留めて置くことにする。

     一般に、日本国内のWindows使いがエディタでソースを普通に編集する場合は、Shift_JIS系のCP932で手軽に気にせずに書いているかと思う。実際、javac も、WindowsのロケールであるShift_JIS系のCP932を既定の文字コードとしてコンパイルを試みる様になっているから通常意識することはない。その意味でJavaはユーザフレンドリであるとも言える。
     しかし、他方、今日ではWindowsでなくLinuxやMacOSXで開発するユーザも決して少なくない訳だが、その場合のOSの既定文字コードは今日にあってはUTF-8が当り前となっている。その為、Linuxで開発したものをWindows環境で編集しデバッグしなければならなくなった場合に困ってしまうことになる。

     また、今日のシステム作成にあっては、日本国内市場向けまたはその一ユーザ向けのシステムであればそれでも問題ないこともあろうが、そうして創ったCP932のコードから生成されるclassファイルには内部的にStringオブジェクトがUNICODE文字に変換されてしまう訳であまり意味をなさない。その上、あまり気にしない人もいるのだろうが、日本語がShift_JISの文字コードで全て表せる訳ではない。その為、Shift_JIS系のWindows環境では国語学者が認めないコード登録を認めない不足した文字コードを外字で補っているのである。
     でも、Unicodeの世界では、日本政府の規格から漏れた異体字がCJK拡張文字として登録されて来ている。Windowsユーザとて使わない手はない。文化に国境はないので国際交流が進めば相手国の文字も当然の様に自国の文献に交じって来るものなので、将来はUnicodeでなければブログも書けない時代となるかも知れないのである。

     さて話しを戻そう。となると、Windows環境であっても最早、JavaコードをShift_JIS系で書くことは、日本語をローマ字書きにすることに等しいと言えば明らかに過言であろうが、既に近年のWindows環境でも内部はUnicode文字の利用がされている訳なので、Unicodeを利用しない方が返って不自然なことなのであるし、世にあるほとんどのエディタでもUncode利用が可能な曲なりに可能となっていることを考えれば、ソースコードはUnicode系の文字コードで記載することが自然な流れである。

     ということで、Windows環境でJavaコードをUnicode系の文字コードで書くにはUTF-8を使うことになる。UTF-8は、従来のASCIIコードは1バイトのまま、欧州のその他のアルファベット文字を2バイトで、その他を3バイト以上で表す可変長の文字コード体系をとっていることから、事実上全世界の文字を単一の文字コードで表すことが出来る為、コンピュータの世界では標準的なコードとして活用されている。ロゼッタストーンをご存じだろうか? 異なる古代文字が併記されていたことから、古代の各言語の解析の鍵となった遺跡であるが、それを文字コードで書くにはUTF-8で書くしかないのである。

     さて、そんな、UTF-8でソースコードを書けるエディタはどんなものがあるのたろうか? 取敢えずであれば、MkEdior等の多くの和製エディタでもJIS水準内の文字程度迄なら記載可能なのでそれらを利用すればよいだろう。しかし、前述のCJK拡張文字の利用となるとほとんどが全滅である。むしろ海外製のutf-8対応ものが使えるのだが、メニューが英語のままであったりする。日本製で当方が知っている範囲で言えば、A.Ogawa's homeで公開されているoeditがある。機能的には比較的simpleながら、ある程度のカスタマイズも可能なので、一度DLして試してみると良いだろう。例えば、牛丼の吉野家の吉を正しく書きたいときに重宝する。但し、そうするには、メイリオ等のUnicode系フォントが対応出来ることが必須である。恐らくXPが対応の限界なのでそれ以前の環境の方は素直に諦めて頂きたい。取敢えずMkEditorでも文字コードは選択できるので。


     で、そうやって書いたUTF-8のソースコードは、Linux上では何のオプション指定をすることなく、javacでコンパイル出来るが、Windowsではそうはいかない。Windowsの場合には次の様に文字コードをオプション指定して実行することで可能になる。続きを読む
    タグ:java
    posted by Mire at 22:26 | Comment(0) | TrackBack(0) | Java学習 | このブログの読者になる | 更新情報をチェックする

    2011年06月06日

    或る無能なPythonistaの憂鬱〜Java学習

     速くもJava学習を開始し、1月以上になり、漸く見通しが利く様になって来た気がする。そろそろ、色々と感動と歓喜(まだないが(笑))、そして不平不満について感じたままに書かせて頂こうかと思う。

     そうは言っても、まだ基礎的な概念が頭に入った程度であり、まだまだ、構造化プログラミング的発想からの機能面からコーディングをJavaの枠に納めている程度なので、本当の意味でJava的な理解ではない。従って、あくまで素人の戯言、寝言に過ぎないことを予めお断りしておく。


    1. Java入門書の例題は何故無意味なコードが多いのだろうか?

     先ずは当方が選んだ「やさいしJava」の例題ではCarというクラスに車の番号とガソリン量をセットするというもので延々と説明が続く。そしてガソリンをマイナスにすることはないからとの決めつけてコーディングが決まる。現実の車はどうかというと、給油時には確かにプラスのみだろうが、さて廃車にしようとしたときにガソリンを抜き取ろうという人やトラック等では軽油燃料の融通等でマイナスにすることもある筈だ。そして何よりも、走ればガソリン量は減るし年スパンで長期間止めていたら蒸発して減って行く筈であり、マイナスが無いという決め付けは横暴に感じてしまうのはMireだけであろうか?
     クラスの理解では何を題材にするかで、その必要性がより明確に出来るというものである。これが曖昧な例題で理解しろというのは学習者のやる気を拷問に掛けている様なものではないだろうか? 別にMireは、Java好きではないので構わないけど、機能説明の為だけのサンプルがネット上にも溢れている。果たして、これでいいのだろうか?


    2. オブジェクト指向によるプログラミングって何だ?

     Mireは根っからの構造化プログラミング指向の人間である。システム作りってものは、入力または出力から考え、@出力に必要となる入力データを調え、A出力情報の形を詰め、Bその間を処理でつないでしまえば完成する極めて単純なものと考えている。これだけなら、どんな言語を用いても差はないし、これを簡単に素早く上げるには、構造化プログラミングの発想が最適である。
     無論、実際の業務では、入力がWebブラウザ画面だったり、データ整理と蓄積がRDBMS上であったり、出力は動的にXML文書てあったりと多くの修飾が伴なう当然の様に伴なう訳だが、処理結果が同じである以上、データ処理の流れそのものに差はない。そんなこともあり、Mireは道具としての言語にPythonを多用していた。Pythonはクラス強制ではないので、普通にスクリプトとして上から下に文を並べたものでもいいし、必要により関数で機能別に括って書きモジュール登録することで同じ処理を何度も書かないで手早く完成することが出来る様になる。実際、仕事に追われ睡眠不足で思考停止に陥った状態でも、一定のパターンでループと条件処理を書き実行結果を確認しつつつ答えに近づけて行くことで、一切考えることなく、ネットワーク管理、バックアップ管理、ユーザリソーススケジュール管理、監視カメラデータ管理と必要となった幾つものシステムを短時間に作成して来たものである。
     そんな視点で、Javaによるオブジェクト指向プログラミングを眺めて試ると、確かに大量に人件費を使ってよってたかって作る「金の出るシステム」なら、現実のオブジェクトとして機能とデータをオブジェクトに分けて、きめ細かく作り込んでしまえば、利用の前程条件が少なく出来るものを創り込むことが出来る可能性が高いし、それが出来てしまえば、再利用性も高く、そのパッケージを活用出来る人は幸せになれる筈ではある。そして、Javaでは、そんなパッケージが有償無償に関わらず多数資産として存在していることも事実で、それ故、システムビジネスの世界でJavaは一際存在感があるのであろう。

     でも、そんなJavaを外から見ると、金と時間があるならJavaだけど、予算なしで、責任者自身が自己責任でこなす程度のシステムでわざわざオブジェクト指向でJavaは無いだろうという気がするのも事実である。無論、Pythonにもクラス概念も併存するので、必要性があれば何時でももそのスタイルでコーディングすることは出来るが、JavaとPythonの差は何と言ってもそのコーディング時のタイプ数の差だろう。無論、Pythonとて同じことを厳密にさせようとすると意味不明なくらい多重な処理を重ねることになるが、汎用性をシステムの運用先に限定すれば、直感的な短いコーディングで済ませることが出来る。当方の場合は、そんなシステムを中心に開発しつつ、時間的な余裕のある範囲で汎用性を高める努力を加えていた口である。
     例えば、コーディングするソースコードはPythonでは全プラットフォームでUTF-8とすることが推奨されているので、Mireは、Winであれ、Linuxであれ双方で使う可能性があるものは、全てUTF-8で書くことを基本としている。Javaの様にOSの既定値依存ということに甘んじている訳ではない。無論、この場合でも、データファイルがUTF-8,Shift_JIS,EUC-JPと混在して来ることが想定させる場合には、ソースコードとは別に普通のopen()でなく、「from codecs import open」等として「f = open(,'r', "UTF-8")」等とコーディング量が増えることは事実だが、Javaに比べたら微々たるものだ。そんなことで、この或る無能なPythonistaは、Java信者から見ると異教徒である構造化プログラミングがらなかなか足抜けしようとしない。勿論、有能なPythonista達のほとんどがPythonコードの多くをクラスで書いていることも事実なので、何時迄も今のままで良いと言うものではないことは認識しているが、一筆書きで簡単に済むものは別に初めからモデリングを意識してクラスで描く必要はないと思う。
     以前、汎用関数をクラスに無理やり詰込んで試たが、そんな程度のものであればクラス化する価値は通常ないし只の時間の無駄であり、システム屋の遊びの域を出ないのではないだろうか。


    3.Javaは仮想マシン向け中間コード変換コンパイラ(javac)+インタプリタ(java)

     実際Pythonと比べると、余りさはないことが判る。違いは仮想マシンと言う思想の基で作ったのでコンパイラというかどうかと言うことと、中間コード生成にあたり作業としてのコンパイルを残したーてしまった言語であることではないだろうか?
     今時の言語でOS依存の言語なんて珍しい。精々MS者とApple社のアレくらいだろう。Pythonの場合も主だったOSでほとんどのものが、ほとんど書替えることなくそのまま動作する中間コードを実行するインタプリタがpythonであるし、実行速度を稼ぐ意味で中間コード変換するのもpythonというコマンドが最初の1回だけ行なう様にしているだけである。pythonはコンパイラ言語と思っていないので生成した中間コードを通常はメモリー上に置いているので、中間コードの存在を隠ぺいしている点が逆にバーチャルに見える訳だが、 Java同様に手続き的に(Pythonではコンパイルとは呼ばないが)、中間コードファイルを生成したければ、「python -O 〜」とすれば「.pyo」という拡張子の中間コードファイルがpythonコードと同じディレクトリに生成されるし、ライブラリ登録したものは、そうしなくとも「.pyc」が勝手に生成されていて、ソースが書き直されない限り、中間コード側が利用される仕組みである。
     Javaでもコンパイラを意識したくなければ、次の様なshellスクリプトを作り、実行クラス名のjavaソースの拡張子を除く名前を指定して実行頂ければ、毎回コンパイルという作業をしていまうものの、Python等のインタプリタ言語と同じ操作性が実現する。これにソースコードのタイムスタンプ変更チェックを入れ変更の有無でコンパイル作業を回避する様に改良すれば、差が無くなってしまう。ここいらは、使う人の意識と設計者の思想の差しかない訳だ。


    Linux等のbshellでは次のJava.shを実行権を付け/usr/bin辺りに放り込んで試るとよい。

    #!/bin/sh
    javac $1.java
    java $1.class


    Windowsでは次のjav.batファイルをWindows\System32辺りに放り込めばよいだろう。

    javac %1.java
    java %1.class
    タグ:java
    posted by Mire at 00:21 | Comment(0) | TrackBack(0) | Java学習 | このブログの読者になる | 更新情報をチェックする
    月額見放題1,000円開始キャンペーンバナー(画像ありver)
    紺碧の艦隊 ルパン三世 GREAT CHASE クリックプロモーション
    << 2011年06月 >>
          1 2 3 4
    5 6 7 8 9 10 11
    12 13 14 15 16 17 18
    19 20 21 22 23 24 25
    26 27 28 29 30    
    カテゴリ
    タグクラウド
    ファン
    利用中のオープンソース
    最近のコメント
    最近の記事
    過去ログ
    QRコード
    レガシーなアプリはいかが?
    Dell 法人のお客様ページ
  • 【法人様向け】デル、お得なキャンペーン情報
  • 法人のお客様向け ストレージソリューション
  • 法人のお客様向け ネットワークソリューション
  • 【SOHO法人様向け】デル・オンライン広告限定ページ
  • デル-個人のお客様ページ
  • 【個人のお客様向け】デル・オンライン広告限定ページ
  • オンライン広告限定キャンペーンページ
  • ソフトウェア&周辺機器 パソコン工房
    ツートップインターネットショップ(twotop.co.jp) マウスコンピューター/G-Tune
  • ×

    この広告は1年以上新しい記事の投稿がないブログに表示されております。