accountでjava

ある閉鎖されたメーリングリストにPREタグで囲まれてる文を投げました。そのつづき。
Squeakのチューターのaccountでjavaでふくすうのaccountを作成に対応したそーすです。。
下記クラスで構成

普通は、クラスの概略とシグニチャを解説すべきであるがめんどくさいので概略のみ。

account.java

足し算と引き算と値を返すクラスです。足し算は預金。引き算は引き出し。値を返すは残高照会となる。

accountTest.java

mainがあるくらすです。accountテスト用のクラスです。乱数生成して絶対値にしていません。java.lang.Mathのabs()が???。java.langはimportせんでも使えるはず。importしてもコンパイルとうらないので、呼び方がおかしいらしい。

accountOperator.java

アカウントに対して入手金を操作するクラス。
1アカウントを1ファイルで管理。idはファイル名と等しい。1行目に預金残高を保存。
入出金発生時に、ファイルに対しでぃすくIOを発生させる。

accountManager.java

アカウントを新規作成する。新しいidから新しいファイルを作成。新しいidはidManagerからゲット。

idManager.java

もっともひどい実装のクラス。ディレクトリのファイル数+1を返すだけ。
ファイルリストの配列をもどしてんだから、数の最大値取得をすべき。

下記よりメール引用。
各位殿
お疲れ様です。

無料のオブジェクト指向プログラミングプログラムを紹介します。

・Squeak (Smalltalk)
下記URLがチュートリアルとなっています。
興味あらば、お試しください。
http://www.ogis-ri.co.jp/otc/hiroba/technical/Squeak/index.html

Squeakは下記URLから手に入れることができます
上記URLでリンクされてるイリノイ大学の書庫にはつながりません
http://www.Squeak.org/



・Java
Java関連は下記URLから落とせます。
http://java.sun.com/
http://www.blackdown.com/
blackdownはRuntime環境(JRE)を提供。

*インストール方法
セットアップを実行し、binとカレントディレクトリにパスを通します。

Windows9*
AUTOEXEC.BATにパスを設定し再起動
例:SET PATH=.;"C:\jdk1.3.0_01\bin"

Windows2000
コントロールパネル->システム->詳細->環境変数で設定

Linux
.bashrcまたは/etc/profileにパスを設定し、sourceを実行。
PATH="$PATH:.:/usr/local/src/jdk1.2.2/bin"

下記URLに日本語のAPI言語仕様へのリンクがあります。
http://java.sun.com/j2se/1.3/ja/docs/ja/index.html


*サンプルのJavaソースコードaccountクラス作成

public class account {
 private int id;
 private int money;
 //コンストラクタ
 account(int i) {
  id = i;
  money = 0;
 }
 //残高照会
 public int getBalance() {
  return money;
 }
 public int getId() {
  return id;
 }
 //預入れ
 public void deposi(int m) {
  money = money + m;
 }
 //引き出し
 public void pullOut(int m) {
  money = money - m;
 }
}

accountクラスのテストクラス
public class accountTest {
 public static void main(String args[]) {
  account obj = new account(2357);
  obj.deposi(10000);
  System.out.println("\\10000預入。残高は\\" + obj.getBalance() + "です。");
  obj.pullOut(5000);
  System.out.println("\\5000引出。残高\\" + obj.getBalance() + "です。");
 }
}

Javaではファイルをクラス名と同一名で保存しなければなりません。
コンパイル
> javac account.java
>javac accountTest.java
実行
>java accountTest
結果
\10000預入。残高は\10000です。
\5000引出。残高\5000です。


・C++(bcc)
 C++のコンパイラを下記URLからダウンロードできます。
http://www.borland.co.jp/cppbuilder/freecompiler/index.html


*インストール
セットアップ実行後、binにパスを通し再起動
readme.txtに沿って下記ファイルを作成
bcc32.cfg
ilink32.cfg


*サンプルのC++ソースコードaccountクラス作成

#include 
class account {
 int id;
 int money;
public:
 //コンストラクタ
 account(int i) {
  id = i;
  money = 0;
 }
 //残高照会
 int getBalance() {
  return money;
 }
 int getId() {
  return id;
 }
 //預入れ
 void deposi(int m) {
  money = money + m;
 }
 //引き出し
 void pullOut(int m) {
  money = money - m;
 }
};
void main(void) {
 account obj(2357);
 obj.deposi(10000);
 cout << "\\10000預入。残高は\\" << obj.getBalance() << "です。" << endl;
 obj.pullOut(5000);
 cout << "\\5000引出。残高\\" << obj.getBalance() << "です。" << endl;
}

sample.cppで上記ソースを保存
コンパイル
> bacc32 sample.cpp
実行
> sample
実行結果
C:\lang\c++> sample
\10000預入。残高は\10000です。
\5000引出。残高\5000です。


・LinuxとC
OOPではありませんが、気になるので追加。
ライブラリで同一の処理を実行。

/*account.c*/
int id;
int money;
void init(int i)
{
 id = i;
 money = 0;
}
int getBalance(void)
{
 return money;
}
int getId(void)
{
 return id;
}
void deposi(int m)
{
 money = money + m;
}
void pullOut(int m)
{
 money = money - m;
}


/*acount.lib*/
void init(int);
int getBalance(void);
int getId(void);
int deposi(int);
void pullOut(int);



/*accountTest.c*/
#include 
#include "lib.h"
int main()
{
 init(2357);
 deposi(10000);
 printf("%d\n",getBalance());
 pullOut(5000);
 printf("%d\n",getBalance());
 exit(0);
}


コンパイルとリンクと実行は下記
[taked@localhost taked]$ cc -c account.c accountTest.c
[taked@localhost taked]$ ls *.o
account.o  accountTest.o
[taked@localhost taked]$ cc -o accountTest account.o accountTest.o
[taked@localhost taked]$ ls accountTest
accountTest
[taked@localhost taked]$ accountTest
10000
5000
[taked@localhost taked]$


現状では1人のアカウントしか作っていないため、
複数のアカウントを作るようソース変更予定。