オブジェクト指向perl
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/05/29 01:51ID:vRl7MJUjやサイトないですか?なかなか見つかりません。
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄
∧∧ ∧∧ ドドドドドド・・・・
(゚Д゚ ,,) (゚Д゚ ,,) ∧∧ (´´
⊂_⊂V⊂ ⊂ )⊂(゚Д゚ ,,)_/(´´
Y /⊃ | .L⊃∧∧∪ _⊃(´⌒(´
ドカ ∪∧∧J⊂(x _x⊂ノ(´⌒(´ (´´
ドカ ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
ズザ・・・
0003nobodyさん
02/05/29 05:54ID:???他のオブジェクト指向言語の利用経験はあるの?
Perlのオブジェクト指向機能って変則的だから、オブジェクト指向の概
念がしっかりわかってないとツラいよ。もし経験が無いなら遠回りなよ
うでも一旦Ruby等の言語を使ってみる事をすすめる。
0004nobodyさん
02/05/29 17:21ID:???あと自分の作ろうとしてるモジュールが既にないか調べとけ。
1に質問書く単発スレうざい。
00051
02/05/29 20:58ID:???オブジェクト指向は初めてです。
はじめがperlなんで・・・
それにしても一旦rubyをやるとなると相当時間かかりますね。
それほど大変なんだろうな。ありがとうございます。
>>4
それ今日たまたま見た。6500円はちと高い。
作ろうとしているものが既にあるかどうか調べといてやるよ。
0006nobodyさん
02/05/29 21:02ID:???おまえさ、もっと普通に会話できんの?
アドバイスはありがたいんだけど、見てるとむかつくんだよ。
ガチンコじゃね〜んだから、もっと普通にしろや。
00074
02/05/29 21:25ID:???1に質問書く単発スレうざい。
1に質問書く単発スレうざい。
3回書けば判っていただけますか?
それと「調べといてやるよ」なんてバカみたいなことは一々宣言しないで結構です。
『Perlモジュール活用ガイド』はモジュール作るのにはあまり役に立たないが、
Chapter10のデバッグ関連の所は一通り見た方がいい。
0008nobodyさん
02/05/29 22:18ID:???それなら手持ちの入門書で「モジュールを作る」あたりを読めば簡単。
0009nobodyさん
02/05/30 01:26ID:axCq6x300011nobodyさん
02/05/30 07:17ID:???まずはオブジェクト指向してないモジュールを書くとこから始めれ。
$obj->method()形式で呼び出せないとカッコ悪いと思ってるかもしれな
いけど、全然そんな事ないから気にするな。
あと、オブジェクト指向ってのは見通しのよいプログラムをデザインす
るための大量の思想・概念・道具類・センス等の寄せ集めだから、文法
憶えてハイ修得ってわけにはいかない。生涯かけて学んでゆく規模だか
ら、数種類の言語を学ぶぐらいは当然。で、Perlでオブジェクト指向を
学ぶのは遠回りだ。時間浪費する事になるよ。
0012nobodyさん
02/05/30 16:09ID:???0013nobodyさん
02/05/31 17:01ID:aUKFTjWZオブジェクト指向自体はそんなことめざしてません。
00141
02/06/01 01:25ID:???とりあえずオブジェクト指向していないモジュール(つうか
自作のサブルーチンを集めたようなもの)はいろいろ作ったり
してます。いろいろ作っていくうちCGI_Lite等のようなものを
作りたくなった、というのもオブジェクト指向を勉強してみた
いと思った要因でもあります。
まずは「オブジェクト指向」というものはどんなものか?
ということから理解しないとだめなんすね?それにはrubyをまず
してみろと・・・長い道のりになりそうだけどがんばってみます。
アドバイスありがとうございます。
0016nobodyさん
02/06/03 00:17ID:???おれなんか初心者スレに質問書いた時、回答が「基礎からやりなおせ」だけだった時があったからね。
答えるのがあたりまえとは思ってないけど、答えるんなら、も少し情報くれてもいいのにとは思った。
0017use IO::Socket;
02/07/01 12:34ID:???ここをオブジェクト指向Perl講座にしてみよう
0018use IO::Socket
02/07/01 12:39ID:???1.クラスの生成
{ package ClassA;
}
2.コンストラクタ
メソッド名はなんでもいいが一般的にはnew
{ package ClassA;
sub new {}
}
3.コンストラクタ実装
ClassAのオブジェクトを返すには、自分のアドレスとデータメンバの入った
無名ハッシュをblessする
{ package ClassA;
sub new {
my $class = shift;
my $hash = {
data1 => shift,
data2 => shift,
data3 => shift
};
bless( %hash, $class );
}
}
4.あとは適当にメソッドなど追加する。以上
0019use IO::Socket
02/07/01 12:48ID:???1.オブジェクトの生成
$obj1 = ClassA -> new( $data1, $data2, $data3 );
「ClassA ->」は第一引数にClassAへの参照が入る。
よって@_は( ClassA, $data1, $data2, $data3 )となる。
2.オブジェクトの使用
1.で$objにClassAのオブジェクトが入っているのでこれを利用する。
$retvalue = $obj -> Method1();
もし、Method1がClassBのオブジェクトを返し、Method2がClassBに属する(以下略)なら
$retvalue = $obj -> Method1() -> Method2() -> Method3() ...;
と続けて出来る。これぞオブジェクト指向。
0020nobodyさん
02/07/01 14:52ID:???0021nobodyさん
02/07/03 10:50ID:???0022ぺるにゃん
02/07/18 02:36ID:???Perl に戻ってきた方が理解が早いと思うにゃ。
だまされたと思って、Java とかやってみて。
0023nobodyさん
02/07/18 09:32ID:???全部元クラスじゃんみたいな。
0026初期不良
02/07/18 22:48ID:5Jy0ruag継承のためにこんなコンストラクタ作らなきゃならんのは
どうかと思う罠。Perl6 だとどうなるのか知らんけど。
sub new{
my $param = shift;
my $class = ref($param) || $param;
my $obj = {};
bless($obj, $class);
return $obj;
}
0031初期不良
02/07/19 13:22ID:???すまん俺の勘違いだったみたい。
継承のために必要というわけじゃないらしい。
てっきりスーパークラスのコンストラクタを呼び出すときに
そうなってしまうというのかと思ってた。
サブクラスでコンストラクタをオーバーライドしなかった場合
スーパークラスのコンストラクタが呼ばれなきゃならんけど
下の文法だとそれが行われないって問題だけみたい。
Subclass->new(); #OK
new Subclass; #NG
0032nobodyさん
02/07/19 15:22ID:???デマ流すなよ。。。
#!perl
my @obj;
push @obj, Super->new();
push @obj, Subclass->new();
push @obj, new Subclass;
for my $obj (@obj) {
$obj->compute();
}
exit;
package Super;
sub new {
my $class = shift;
my $self = bless {
message => 'Hello World!'
}, $class;
$self->init();
return $self;
}
sub init {
my $self = shift;
print $self->{message}, "\n";
}
sub compute {
my $self = shift;
print scalar(localtime), "\n";
}
package Subclass;
use base 'Super';
sub compute {
my $self = shift;
print scalar(gmtime), "\n";
}
0033初期不良
02/07/19 19:14ID:???スマソ
確認しなかった俺が悪かった。
perl5004 とか収録している本だからかな?
new Subclass の構文は失敗する、と
258 ページにはっきりと書いてある。
Perl5.003をベースにしたプログラミングPerl改正版でも、
new Subclassに問題があるようには読めないなぁ。
その本の作者、またはキミが激しく勘違いしていることは間違いないね。
0036nobodyさん
02/11/21 12:09ID:???どこか初心者用の解説サイトみたいなとこしらないっすか
0037nobodyさん
02/11/21 12:11ID:???メソッドって?クラスって?てな感じです
ちなみにC言語とかはそこそこ使えます
0038nobodyさん
02/11/21 12:33ID:???んじゃ勉強すれ
JAVAの本なんかにみんないろんな方法でかいてあるよ、電気スタンドとか
コーヒーに例えて(わら
それがまたややこしいんだってことに気付かない著者ってステキだがな。
0040nobodyさん
02/11/21 12:45ID:???Perlでも同じ?
0041nobodyさん
02/11/21 15:14ID:???Perlオブジェクト指向
ttp://www.pure.ne.jp/~learner/program/Perl_oo.html
ざっと見てみたけど、いいサイトだと思う。
>>40
Perlでは、オブジェクト=インスタンス=ブレスされたハッシュ
Perlでは、クラス=モジュール+OO構文
0042bloom
02/11/21 16:41ID:kapC4rRRhttp://www.agemasukudasai.com/bloom/
0044nobodyさん
02/11/21 22:57ID:CidwFuxc#どうすればいいか分かりません。教えてください。
my $b = new a();
print 'nothing';
$b->nothing();# hoge
print 'read';
$b->read();# hoge
package a;
sub new {
my $this = shift;
my $self = {};
bless $self, $this;
return $self;
}
sub read {
my $self = shift;
print "hoge\n";
}
AUTOLOAD {
my $self = shift;
$self->read();
}
0045nobodyさん
02/11/22 04:39ID:lEF6CpYA0046nobodyさん
02/11/22 12:58ID:syWpYZeWお願いです、教えてくださいです。
0048nobodyさん
02/11/23 11:22ID:JSIskFPb直ったああああああああああありがとう!!
0049nobodyさん
02/11/23 12:20ID:iOXxXzff0050nobodyさん
02/11/24 06:31ID:t0EFz7jF出来れば詳しく解説してるサイトも教えてもらえるとうれしです。
0051nobodyさん
02/11/24 06:38ID:t0EFz7jF自己解決しますた。すいません
0052nobodyさん
02/11/24 13:56ID:brwF5wjl0054nobodyさん
02/11/25 00:03ID:26KaLUcmちなみに俺は↓でPerlのモジュールを学んだ。
http://www.melma.com/mag/85/m00014785/
0055nobodyさん
02/11/29 01:20ID:???「オブジェクト指向Perlマスターコース」
は良い本だと思う。(個人的に一番)
だから誰か中古で買って。
会社の倉庫に眠ってた(新品同様)のを貰ったんだけど
以前個人的に買ったからダブってるんだよ。
0056nobodyさん
02/11/29 11:18ID:???use strict;
はプラグマというものでコンパイラにヒントを与えるものだ。
慣習としてuseする際に大文字から始まるものはモジュールで
小文字から始まるものはプラグマらしい。
0057山崎渉
03/01/15 13:43ID:???0058山崎渉
03/04/17 12:27ID:???0059山崎渉
03/04/20 06:05ID:???( ^^ )< ぬるぽ(^^)
0060山崎渉
03/05/22 02:09ID:???0061山崎渉
03/05/28 17:16ID:???ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0062山崎 渉
03/07/15 11:17ID:???__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0063山崎 渉
03/08/02 02:34ID:???( ^^ )< ぬるぽ(^^)
0064nobodyさん
03/08/09 10:54ID:n2jzMQj6多言語の経験はなくフリーの物を改造からはじめて独学2年、perlのみです。
で、オブジェクト指向を勉強したいと思っています。
本は「初めての〜」「プログラミングperl」「CGIプログラミング」
「入門perlDBI」「EfectivePerl」などを読みました。
以下、僕が良く作っているスクリプトの構造ですが、これをオブジェクト指向で組み立てるとどんなふうになるんでしょうか。
なんとなく本を読んでいてぼんやりとイメージが掴めかけていますが、では
実際自分が書いているものが、オブジェクト指向だとどんな風になって
どんなメリットがあるのか、が具体的に見えてきません。
どなたかわかりやすく教えて下さいませんか?
#おこられたので二つに分けます。
006564
03/08/09 10:54ID:n2jzMQj6######
&main();
exit;
sub main{
if($mode eq 'view'){&view}
elsif($mode eq 'form'{&form}
elsif($mode eq 'regist'{®ist}
elsif($mode eq 'delete'{&delete}
}
sub view{
# 閲覧表示
}
sub form{
# フォーム表示
}
sub regist{
# データ書き込み
}
sub delete{
# データ削除
}
######
宜しくお願いします。
0069nobodyさん
03/08/09 22:12ID:???最終的にif文からは逃げられない。せいぜいその部分を外に出すだけ。
そのあと機能ごとに同じ名前のメソッドを作ってポリモフィズム。
メリットはmainのソースをいじらなくてすむことかな。
package main;
my $app = FooBar::Factory->func($mode);
$app->run;
exit;
package FooBar::Factory;
use base 'FooBar';
sub func {
my ($mode) = @_;
if ($mode eq 'view') {
return FooBar::View->new;
} elsif ($mode eq 'Regist') {
return FooBar::Regist->new;
}
return FooBar->new;
}
package FooBar;
sub new { ref $_[0] ? ref $_[0] : $_[0] }
sub run {
my $self = shift;
$self->doing;
$self->output;
}
package FooBar::View;
use base 'FooBar'; sub doing { ... } sub output { ... }
package FooBar::Regist;
use base 'FooBar'; sub doing { ... } sub output { ... }
007069
03/08/09 22:13ID:???0071nobodyさん
03/08/10 09:38ID:???ありがとうございます。
昨日「オブジェクト指向perlマスターコース」買ってきて読み始めましたが、
まだ言葉の意味から探っている段階です。
書いて頂いたもの、僕が出した例の「条件分岐によるサブルーチンの振り分け」
のその上に「オブジェクト指向」という概念、というかレイヤーをもうひとつ
かぶせている、という事でしょうか。
オブジェクト指向でプログラムを構築する、と言うのはある程度の規模でこそ
メリットが発揮される、というように感じますがどうなんでしょう。
今書いているものは2000行程ですが行の半分はHTML展開部分です。
で、進め方は設計の概略は最初に考えるものの細かな部分を含め、
どうしてもボトムアップな進め方になってしまってます。
こんな進め方は「オブジェクト指向」なプログラムには向かないような気がしています。
もっとトップダウンで進める、というか、初期の設計段階にもっと時間を
かける、というか。
僕が書いたやり方だとプログラムの構造が「フラット」な気がします。対して
書いて頂いたものはもっと「階層構造的」なきがします。
「フラット」なものは全体が煩雑になりがちですが、でもどうにでもいじくれます。
でも書いた本人以外にはわかり難い物になるでしょうね。
でも「階層構造的」なものは一部分の変更は容易で他の人にもプログラムの
全体構造はわかりやすいでしょうが、逆に言うといじくれる範囲が限定されてくる。
その分全体構造なり仕様を設計初期である程度明確にする必要がある、様な気がします。
> メリットはmainのソースをいじらなくてすむことかな。
これは僕が書いたやり方でもプログラムの構造が変わらない限り、同じだと
思うのですが、そういうことではない、という事ですか?
0072nobodyさん
03/08/10 16:17ID:???オブジェクト指向はしっかりとした設計を先に練らないと役に立たないし、
そうしないと後から後からやってくる仕様変更に耐えられません。
(そうしたいい加減な設計に振り回された人達が
「オブジェクト指向は実践では役に立たない」と広める結果に)
だから何かを作る時に、プログラミングは最後の段階というか、
あとは予定通りにコードを書けば完成、というくらいになるまで書かない方がいいと思う。
ってそれが出来たら苦労しないんだけど。
> これは僕が書いたやり方でもプログラムの構造が変わらない限り、同じだと
> 思うのですが、そういうことではない、という事ですか?
コードは一つのファイルに全てを書かずに、モジュールに分割してください。
オブジェクト指向だろうがなんだろうが、綺麗なソースは変更点が少なくてすみます。
あとこれは嫌味ではなく、一度別のオブジェクト指向の言語に触れておいた方がいいです。
その方が理解が速い。Perlは独特だから。
007371
03/08/10 17:33ID:???ありがとうございます。
なるほど、やっぱりある程度の規模で今までより大きなプログラムの
設計概念から入れ、それでこそ生きる手法、って事でしょうか。
今、ある組織のサイトの為にperlで書いたCGIスクリプトが三つあるんです。
ひとつは主要なデータを抽出して対外的にアナウンスを出すもの。
二つ目は組織の各部署を統合しながらスケジュール管理するもの。
三つ目は活動記録などをリクエストされた形態で表示するものです。
三つはもともとその時その時の必要に応じて書いたもので、
もちろんデータも別に持っているのですが、ここに来て同じようなデータを
持っていたり、あるいはちょっと加工することでデータやルーチンを共有
した方が効率的だ、何とかならないかな、と思っていました。
こういう要求には「オブジェクト指向」って役に立ちそうですね。
もっと勉強しなければなりませんが、勉強するモチベーションはあがりそうです。
>一度別のオブジェクト指向の言語に触れておいた方がいいです。
これはよく聞きます。
まあもともとperl自体がオブジェクト指向を念頭に設計されてない、って事でしょうね。
オブジェクト指向、とは別にある方からJAVA勉強すれば、といわれているのです。
とりあえず今のところperlに一所懸命なものでなかなか手につかないのですが、
zdnetやらatmarkitやら暇を見つけてはJAVAについての記述を読んだりしていますが
なかなか難しいです。
どうしてもWEB関連での開発ということになるので、まずテスト環境から構築しなければならないですし。
ありがとうございました。
このスレももっと動いて欲しいですね。
0074nobodyさん
03/08/11 02:19ID:???0075山崎 渉
03/08/15 22:39ID:???│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
007671
03/08/28 12:36ID:???結局いきなりオブジェクト指向なコーディングに入っても、
やっぱり漠然としてるもんで、atmarkitで、
「ここから始めるオブジェクト指向」、と「初歩のUML」読んでます。
なんとなく漠然としてた物がはっきりしてきたような。
本職設計業では良くある具現化手法なのでとっつきやすいし、
イメージつかみ安いですね。
0077nobodyさん
04/01/10 06:31ID:???慣れの問題かもしれんがかなり変則的な書き方してる気もする。
Perl6をとりあえず、待ってみる。もう少し他の言語のOOPに近づいてほしい。
今はとりあえず、利用する側として勉強するにとどめます。
■ このスレッドは過去ログ倉庫に格納されています