2009年12月31日木曜日

Printクラスめも

### 案1 dataを引数としてクラスから各Printクラスをよぶ
package printRole;
use Moose::Role;

requires qw(print_score1 print_score2);

no Moose::Role;

1;

package printPlate;
use Moose;
with 'printRole';

has data =>(is=>'rw', isa=>'Data');

__PACKAGE__->meta->make_immutable;

no Moose;

sub print_score1{};
sub print_score2{};

1;

package printRow;
use Moose;
with 'printRole';

has data =>(is=>'rw', isa=>'Data');

__PACKAGE__->meta->make_immutable;

no Moose;

sub print_score1{};
sub print_score2{};

1;

package printColumn;
use Moose;
with 'printRole';

has data =>(is=>'rw', isa=>'Data');

__PACKAGE__->meta->make_immutable;

no Moose;

sub print_score1{};
sub print_score2{};

1;
# 全部まとめては別クラスを作りゃいいのかな?
package printAll;
use Moose;

has plate =>();
has row=>();
has column=>();

__PACKAGE__->meta->make_immutable;

no Moose;

sub print_all{ print $self->plate;print $self->row; print $self->column; }

1;


### 案2 各Printクラスを格納するオブジェクトを介する
# Role
package printRole;
# class
package printPlate;
package printRow;
package printColumn;
# これだけ別クラス?メソッド名一緒で処理変えればいい?
package printAll;

# 各Printクラスを格納する

package Printer;
use Moose;

has role =>(
is=>'rw',
does=>'printRole',
required=>1,
handles=>[qw(print_score1 print_score2)],
);

__PACKAGE__->meta->make_immutable;

no Moose;

1;

## 各クラスでの処理
$self->print_score1();
sub print_score1{
#これでいいのか不明
my $printer = Printer->new( role => printXXX->new( data => $self->data() ) );
}

### 案3 一まとめでやる →再利用性がないな…
package Print;
use Moose;

has plate =>();
has row=>();
has column=>();

__PACKAGE__->meta->make_immutable;

no Moose;

sub print_all{ print $self->plate;print $self->row; print $self->column; }
sub print_A{ print $self->plate() };
sub print_B{ print $self->row() };
sub print_C{ print $self->column() };

1;

2009年12月30日水曜日

2.1 Bridgeパターン

モダンPerl入門(牧大輔)
より。

Bridgeパターン:委譲系パターン。
ある機能を実装するのに直接オブジェクトに定義するのではなく、それを定義する別のオブジェクトに処理を委譲する。インターフェースを変えずに同じ型でも実装が違うオブジェクトを定義する。

いやー直接書いちゃうんだよねえ。個人の範疇で書いてると。
1000行越えるとマジで手に負えんくなるからな。つーか500越えたらきついな。

このコードのまんま別のオブジェクト作れるね。
早速作っちゃった。
モダンPerl入門ってステキ。

Perlでデザインパターンのお勉強は、

モダンPerl入門(牧大輔)
を参考にしてお勉強。

あたしの書くコードとはえらい違いだ。
かっこいい。

Mooseとデザインパターンをお勉強。つーか最後までやるけどね。

plate クラスめも わからんくなったけど

階層がむちゃくちゃだけどメモ。

package calcRoles;
use Moose::Role;

requires qw(set_score1 set_score2 set_pctflag);

no Moose::Role;
1;

package PlateInfo;
use Moose;

with 'calcRoles';

has path => ();
has file_ref => ();
has data => (is=>'rw',isa=>'Data');
has id => (is=>'rw',isa=>'Str',required=>1,);

__PACKAGE__->meta->make_immutable;

no Moose;

sub BUILD{
my ($self,@args) = @_;
# BUILDじゃない気がするが処理はこれ。
$self->data( Data->new( data=>Data::Parser::Plates->new(files_ref=>\@files) ) );
}
sub set_score1{}
sub set_score2{}
sub set_pctflag{}

1;

package RowInfo;
use Moose;

with 'calcRoles';

has data => (is=>'rw',isa=>'Data',);
has id => (is=>'rw',isa=>'Str');

__PACKAGE__->meta->make_immutable;

no Moose;

sub BUILD{
my ($self,@args) = @_;
$self->data( Data->new( data=>Data::Parser::Rows->new( @args ) ) );
}
sub set_score1{}
sub set_score2{}
sub set_pctflag{}

1;

package ColumnInfo;
use Moose;

with 'calcRoles';

has data => (is=>'rw',isa=>'Data');
has id => ();

__PACKAGE__->meta->make_immutable;

no Moose;
sub BUILD{
my ($self,@args) = @_;
$self->data( Data->new( data=>Data::Parser::Columns->new( @args ) ) );
}
sub set_score1{}
sub set_score2{}
sub set_pctflag{}

1;

package Data;
use Moose;

has data =>(
is=>'rw',
does=>'Data::Parser',
required=>1,
handles=>[ qw(methodA methodB methodC) ]
);

__PACKAGE__->meta->make_immutable;

no Moose;

1;

package Data::Parser;
use Moose::Role;

requires qw(extract methodA methodB methodC);

no Moose::Role;

1;

package Data::Parser::Plates;
use Moose;
with 'Data::Parser';

__PACKAGE__->meta->make_immutable;

no Moose;

sub extract{}
sub methodA{}
sub methodB{}
sub methodC{}

1;

package Data::Parser::Rows;
use Moose;
with 'Data::Parser';

__PACKAGE__->meta->make_immutable;

no Moose;

sub extract{}
sub methodA{}
sub methodB{}
sub methodC{}

1;

package Data::Parser::Columns;
use Moose;
with 'Data::Parser';

__PACKAGE__->meta->make_immutable;

no Moose;

sub extract{}
sub methodA{}
sub methodB{}
sub methodC{}

1;

package main;

# ここはきっちり書かんと分からん。
my $plateInfo = PlateInfo->new(path=>'C:\test', file_ref=>\@files);
my $rowInfo = RowInfo->new($plateInfo,'value');
my $columnInfo = ColumnInfo->new($plateInfo,'value');

1;

2009年12月29日火曜日

早速Iterator導入

いま考えてる仕事のプログラムにIterator導入。
中身は本のとほぼ同じにした。
クラスを別のクラスでBundleする必要があるが、
IDがくっついているのでArrayやListでなくHashtableにした。

動くかなあ。

できるまで楽しみ。
明日はPerlで同じようにデザインパターン導入してみる。
Mooseでね。

2009年12月27日日曜日

1章Iterator

Java言語で学ぶデザインパターン入門

Iteratorパターン
繰り返しだからFor文とかWhileとかあんなんかな。


for(int i){}
iの働きを抽象化して一般化したものと書いてある。
ネストしたようなあるクラスを束ねるクラスにはすべて当てはまるのかね?

で、本章では、
本と
本棚と
本棚をスキャンするクラス
があって、
集合体=Aggregateをあらわすインターフェースと、
順番に数えてスキャンする=Iteratorインターフェースを作成して
実装してる。

となると、本棚が集合体をあらわすインターフェースを、
スキャンがスキャンするインターフェースを実装しているのね。

こんな感じで考えると、
ネストしてけば、それぞれの階層でこのAggregateとIterator
が実装できるわけだな。

インターフェースの例文は
public interface Aggregate{
public abstract Iterator iterator();
}

public interface Iterator{
public abstract boolean hasNext();
public abstract Object next();
}

定義はいつもこんな感じになるのだろうか?
だいたいIteratorといったら定義される処理が決まってくるのだろう。
この例だとShiftっぽい出す動きしかないけどPushみたいな入れる動きも必要だな。
つーかそれは他の章にあるのか?よまんとわからんな。

デザインパターンとはクラスの再利用かを促進するもの
と書いてあったぞ。
2万行とか書いてるとそこら中に似た処理増えて冗長性たけーわ、修正大変だわってなるもんな。毎度意識して作ったほうがいいわな。

実戦投入しながらコツ掴んでいくしかないな。
でもステキ。

「Java言語で学ぶデザインパターン入門」をやる

Java言語で学ぶデザインパターン入門 結城浩

を1章からやっていきましょうかね。
なんかめちゃかっこいい。

クラスの配列の型

Class Plateを作ったら、
それを束ねるAggregaterは、Plate[]って形で持てるのね。

ふつうにString[] とか double[] とか使ってんのに
そんな発想出てこなかった。
Array関連のクラスに持たせるものだと思ってた。

何かすげー。アホっぽいが。
PerlのHashで束ねたいときはどうすんだろ?

float と double

4バイト浮動小数点型と8バイト浮動小数点型。

Doubleは最大15桁らしい。
精度(小数点以下)の指定がまだ不明。
Sprintfっぽいのあるのかね。

後で調べる。

Int と longは?

4バイト符号付整数型と 8バイト符号付整数型

これも整数か。Byte shortよりでかい。

Byte short int long で1,2,4,8バイト整数。

Intしか知らんかった。
ちなみに4バイトだと-2147483648〜2147483647か。10億だ。
でかい。型重要だな。

byteとshortはなんだ?

1バイト符号付整数と 2バイト符号付整数

1バイトで符号つきということは、
±1ビットプラス7ビットだから
2の7乗で±128ってことか?

っておもったら-128から127か。
0が抜けてたな。

じゃあShortは -32768から32767か。

バイト数が決まってるってことは大きさに意味があるってことか?
むやみにでかい入れ物使うと遅くなるのかな?

StringとCharってちがうのか

Perlやってきたから分からんかった。

char って一文字なの?
でStringが文字列?

char a = 'a';
string string = "string";

おれってこういうレベルなのね?

扱う型が違う。でも機能は一緒。戻り値も一緒

っていう複数のクラスがあるときに、抽象クラスを作って継承させる方がいいのか。それともインターフェースを作って実装させるのか?

どっちでもいいのか悪いのかの感覚すらない。
最終的にかえすのがDoubleの配列かそれを持ってるクラスになるが、
処理はClassAではStringをゴチャゴチャしてDoubleを返して
ClassBではIntをゴチャゴチャしてDoubleを返すような形になる。

クラス継承だと同じメソッド名でも処理かえるから
これだとInterfaceの方がいいのか?

つーか両方共オーバーライドするから一緒か?
わけ分からん。

とりあえず両方作ってみて理解していこう。

答えがでてくるかな。

つーかJavaでもやるし、PerlでもMooseでやってみよう。

2009年12月25日金曜日

Win32::GUI::Tooltip

my $main_window = Win32::GUI::Window->new(
-name => 'main_window',
-size => [400,300],
-background => '#ffffff',
);
my $tooltip= Win32::GUI::Tooltip->new($main_window,);
$tooltip->AddTool(-window => $main_window,-text => "ahoahoman",);

2009年12月24日木曜日

widget ウィジェット

GUI作成用の部品クラス

ボタンとかテキストボックスとかコンボボックスとか

Tk::TableMatrixのインストールエラー

C:/strawberry/perl/site/lib/Tk/X11/Xlib.h:1206:41: ../../../pTk/tkIntXlibDecls.h
: No such file or directory

とでた。

Findすると、tkIntXlibDecls.hがC:/strawberry/perl/site/lib/Tk/pTk
にあるので、
ファイルの読み取り専用権限を除いた後、
Xlib.hの 1206 行目を
../../../pTk から ../pTk に変更して 再実行。

見事インストール完了

最近こんなん多すぎ。

2009年12月17日木曜日

Win32::GUI::TreeView 何とかできた

#!perl/bin/perl
use warnings;
use strict;
use Win32::GUI();

my $main = Win32::GUI::Window->new(
-name => 'Main',
-width => 400,
-height => 300,
);

my $tree_view = $main->AddTreeView(
-name => 'TreeView',
-width => 250,-height => 200,
-top=>10,-left=>10,
-buttons =>1,-rootlines=>1,-lines=>1,
-notify=>1,
-showselalways => 1,
-trackselect => 1,
#-onClick=>sub{print "clicked\n";},
);

my $parent1 = $tree_view->InsertItem(
-text => 'parent1',
-indent => 1,
-image => 0,
);
my $child = $tree_view->InsertItem(
-text => 'child',
-indent => 1,
-image => 0,
-parent => $parent1,
);
my $parent2 = $tree_view->InsertItem(
-text => 'parent2',
-indent => 1,
-image => 0,
);

# DblClickのほうが確実
sub TreeView_DblClick{
my $getSelection = $main->TreeView->GetSelection();

if($getSelection == $child){
print "selection:$getSelection\n";
}else{
print "TreeView\n";
}
}

$main->Show();
Win32::GUI::Dialog();

2009年12月4日金曜日

構造

class TestInfo{
String ID;
int size;
double[][] data1 = null;
double[][] data2 = null;
String[][] dataStr = null;

public void setData1(){

}

}

こう書くとPerlよりすっきりした感じ。同じか。
Mooseもいい感じだしな。

デザインパターンて

よいね。なんかすごい。

Perl でも Javaでも使ってみよう。

2009年12月3日木曜日

Oracle silverは

3週間で受かるものらしい。

両方で5万か・・・。
でもやるしかない。

Oracle Bronze

二週間で受かるものらしい。
http://tryoracle.seesaa.net/category/5759492-1.html

即予約。

翔泳社オラクルマスター
徹底攻略オラクルマスター
絵で見てわかるOracleの仕組み

しかしテスト受けるだけで3万弱って・・・。
ボーナスゼロなのに。
ブロンズとらんとはじまらんしな・・・。
Sunってこれでやっていってるんだな。

2009年12月2日水曜日

Catalyst はじまりはじまり

1. catalyst.pl Aho
2. cd Aho/script
3. ./bookmark_server.pl -p 3000 -r
  -pはポートを変更する場合使う。デフォルトで3000
  -r を与えると変更が反映される

これだけでとりあえずローカルサーバーが立ち上がる。
ステキ。