トップページ⇒php
128コメント44KB

オブジェクト指向perl

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/05/29 01:51ID:vRl7MJUj
モジュールを作ろうとしているのですが、何か分かりやすい参考書
やサイトないですか?なかなか見つかりません。
0002 ◆unKo/nko 02/05/29 04:57ID:???
今だ!2番ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄
     ∧∧ ∧∧ ドドドドドド・・・・
    (゚Д゚ ,,) (゚Д゚ ,,)  ∧∧      (´´
    ⊂_⊂V⊂ ⊂ )⊂(゚Д゚ ,,)_/(´´
     Y /⊃ | .L⊃∧∧∪ _⊃(´⌒(´
   ドカ ∪∧∧J⊂(x _x⊂ノ(´⌒(´  (´´
 ドカ  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
    ズザ・・・
0003nobodyさん02/05/29 05:54ID:???
>>1
他のオブジェクト指向言語の利用経験はあるの?

Perlのオブジェクト指向機能って変則的だから、オブジェクト指向の概
念がしっかりわかってないとツラいよ。もし経験が無いなら遠回りなよ
うでも一旦Ruby等の言語を使ってみる事をすすめる。
0004nobodyさん02/05/29 17:21ID:???
『オブジェクト指向Perlマスターコース』。
あと自分の作ろうとしてるモジュールが既にないか調べとけ。

1に質問書く単発スレうざい。
0005102/05/29 20:58ID:???
>>3
オブジェクト指向は初めてです。
はじめがperlなんで・・・
それにしても一旦rubyをやるとなると相当時間かかりますね。
それほど大変なんだろうな。ありがとうございます。

>>4
それ今日たまたま見た。6500円はちと高い。
作ろうとしているものが既にあるかどうか調べといてやるよ。
0006nobodyさん02/05/29 21:02ID:???
>>4
おまえさ、もっと普通に会話できんの?
アドバイスはありがたいんだけど、見てるとむかつくんだよ。
ガチンコじゃね〜んだから、もっと普通にしろや。
0007402/05/29 21:25ID:???
1に質問書く単発スレうざい。
1に質問書く単発スレうざい。
1に質問書く単発スレうざい。

3回書けば判っていただけますか?
それと「調べといてやるよ」なんてバカみたいなことは一々宣言しないで結構です。
『Perlモジュール活用ガイド』はモジュール作るのにはあまり役に立たないが、
Chapter10のデバッグ関連の所は一通り見た方がいい。
0008nobodyさん02/05/29 22:18ID:???
1はオブジェクト指向したいわけじゃなくて、単にモジュールが作りたいだけか?
それなら手持ちの入門書で「モジュールを作る」あたりを読めば簡単。
0009nobodyさん02/05/30 01:26ID:axCq6x30
もういいから Ruby 使いなさい。
0010102/05/30 02:00ID:???
>>8
どちらもです。
0011nobodyさん02/05/30 07:17ID:???
>>10
まずはオブジェクト指向してないモジュールを書くとこから始めれ。
$obj->method()形式で呼び出せないとカッコ悪いと思ってるかもしれな
いけど、全然そんな事ないから気にするな。

あと、オブジェクト指向ってのは見通しのよいプログラムをデザインす
るための大量の思想・概念・道具類・センス等の寄せ集めだから、文法
憶えてハイ修得ってわけにはいかない。生涯かけて学んでゆく規模だか
ら、数種類の言語を学ぶぐらいは当然。で、Perlでオブジェクト指向を
学ぶのは遠回りだ。時間浪費する事になるよ。
0012nobodyさん02/05/30 16:09ID:???
SocketモジュールとIO::Socketモジュールの違いみたいなもんか。
0013nobodyさん02/05/31 17:01ID:aUKFTjWZ
>>11
オブジェクト指向自体はそんなことめざしてません。
0014102/06/01 01:25ID:???
>>11
とりあえずオブジェクト指向していないモジュール(つうか
自作のサブルーチンを集めたようなもの)はいろいろ作ったり
してます。いろいろ作っていくうちCGI_Lite等のようなものを
作りたくなった、というのもオブジェクト指向を勉強してみた
いと思った要因でもあります。
まずは「オブジェクト指向」というものはどんなものか?
ということから理解しないとだめなんすね?それにはrubyをまず
してみろと・・・長い道のりになりそうだけどがんばってみます。
アドバイスありがとうございます。
0015 02/06/01 19:57ID:???
4は普通だと思うが・・・
ずいぶん、甘い板になったな。
初心者スレでCGIに関する質問もずいぶん多くなったし
0016nobodyさん02/06/03 00:17ID:???
>15 そだねー。
おれなんか初心者スレに質問書いた時、回答が「基礎からやりなおせ」だけだった時があったからね。
答えるのがあたりまえとは思ってないけど、答えるんなら、も少し情報くれてもいいのにとは思った。
0017use IO::Socket;02/07/01 12:34ID:???
駄スレ再利用計画
ここをオブジェクト指向Perl講座にしてみよう
0018use IO::Socket02/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::Socket02/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 以外のオブジェクト指向言語に触れてから、
Perl に戻ってきた方が理解が早いと思うにゃ。
だまされたと思って、Java とかやってみて。
0023nobodyさん02/07/18 09:32ID:???
形無し言語でクラスとか多様とか言われてもぴんとこない・・・。
全部元クラスじゃんみたいな。
0024nobodyさん02/07/18 15:03ID:???
>>17-19
こんな抽象的な説明でオブジェクト指向を理解できる初心者がいたら凄いな・・・
0025nobodyさん02/07/18 20:22ID:???
>>23
キミのもっている「形無し言語」の定義と、
世間一般の「形無し言語」の定義は違うぞ。
0026初期不良02/07/18 22:48ID:5Jy0ruag
おりゃPerlモジュール活用ガイドを読んでモジュール作ったけどね、
継承のためにこんなコンストラクタ作らなきゃならんのは
どうかと思う罠。Perl6 だとどうなるのか知らんけど。
sub new{
my $param = shift;
my $class = ref($param) || $param;
my $obj = {};
bless($obj, $class);
return $obj;
}
0027nobodyさん02/07/19 02:00ID:???
>>26
$obj->new(...);
ってのを許すのはあまり好ましくないと言ってみる
0028初期不良02/07/19 03:49ID:???
>>27
継承でそれが必要なんだとさ
0029初期不良02/07/19 03:52ID:???
>>27
しかもこれの事をクローニングとか逝ってたしw
値をきちんとコピーする clone メソッドは別に作ったよ。
ろくに使わんけどなー
0030nobodyさん02/07/19 08:51ID:???
>>28
継承で必要なのは第一引数でblessすることなんだけど…。
その本がダメなだけじゃないの?
0031初期不良02/07/19 13:22ID:???
>>30
すまん俺の勘違いだったみたい。
継承のために必要というわけじゃないらしい。
てっきりスーパークラスのコンストラクタを呼び出すときに
そうなってしまうというのかと思ってた。

サブクラスでコンストラクタをオーバーライドしなかった場合
スーパークラスのコンストラクタが呼ばれなきゃならんけど
下の文法だとそれが行われないって問題だけみたい。
Subclass->new(); #OK
new Subclass; #NG
0032nobodyさん02/07/19 15:22ID:???
>>31
デマ流すなよ。。。

#!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:???
>>32
スマソ
確認しなかった俺が悪かった。
perl5004 とか収録している本だからかな?
new Subclass の構文は失敗する、と
258 ページにはっきりと書いてある。
0034 ◆JAPH9PWA 02/07/19 21:21ID:???
>>33
Perl5.003をベースにしたプログラミングPerl改正版でも、
new Subclassに問題があるようには読めないなぁ。
その本の作者、またはキミが激しく勘違いしていることは間違いないね。
0035初期不良02/07/19 23:00ID:???
>>34
33 に書き忘れたけど完全に同意してるんで許して
0036nobodyさん02/11/21 12:09ID:???
オブジェクト指向言語を勉強したいんですけど
どこか初心者用の解説サイトみたいなとこしらないっすか
0037nobodyさん02/11/21 12:11ID:???
ってゆうか言葉とかも全然っす
メソッドって?クラスって?てな感じです

ちなみにC言語とかはそこそこ使えます
0038nobodyさん02/11/21 12:33ID:???
>>37
んじゃ勉強すれ
JAVAの本なんかにみんないろんな方法でかいてあるよ、電気スタンドとか
コーヒーに例えて(わら
それがまたややこしいんだってことに気付かない著者ってステキだがな。
0039nobodyさん02/11/21 12:35ID:???
>>38
その為のサイト教えてくれー
0040nobodyさん02/11/21 12:45ID:???
JAVEは、オブジェクト=インスタンスだよね
Perlでも同じ?
0041nobodyさん02/11/21 15:14ID:???
>>39
Perlオブジェクト指向
ttp://www.pure.ne.jp/~learner/program/Perl_oo.html
ざっと見てみたけど、いいサイトだと思う。
>>40
Perlでは、オブジェクト=インスタンス=ブレスされたハッシュ
Perlでは、クラス=モジュール+OO構文
0042bloom02/11/21 16:41ID:kapC4rRR

http://www.agemasukudasai.com/bloom/
0043nobodyさん02/11/21 18:05ID:???
>>41
ありがとう
0044nobodyさん02/11/21 22:57ID:CidwFuxc
#それぞれ一回ずつhogeと表示させたいのですが、
#どうすればいいか分かりません。教えてください。

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:lEF6CpYA
助けてー
0046nobodyさん02/11/22 12:58ID:syWpYZeW
メソッド呼ぶたびに二回表示されるのは何故なのですか?
お願いです、教えてくださいです。
0047nobodyさん02/11/22 14:00ID:???
>>44
DESTROY がよばれてる?
0048nobodyさん02/11/23 11:22ID:JSIskFPb
>>>>>>>>>47
直ったああああああああああありがとう!!
0049nobodyさん02/11/23 12:20ID:iOXxXzff
0050nobodyさん02/11/24 06:31ID:t0EFz7jF
get()って何する関数ですか?

出来れば詳しく解説してるサイトも教えてもらえるとうれしです。
0051nobodyさん02/11/24 06:38ID:t0EFz7jF
>>50
自己解決しますた。すいません
0052nobodyさん02/11/24 13:56ID:brwF5wjl
usestrickについて詳しいトコおせーてくだせー
0053nobodyさん02/11/24 15:33ID:???
>>52
まさかとは思うが、もしかして、
use strict;
のことを言いたいのか?
0054nobodyさん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:???
>>52
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:???
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
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
いろいろperlでCGI書いてます。
多言語の経験はなくフリーの物を改造からはじめて独学2年、perlのみです。
で、オブジェクト指向を勉強したいと思っています。
本は「初めての〜」「プログラミングperl」「CGIプログラミング」
「入門perlDBI」「EfectivePerl」などを読みました。
以下、僕が良く作っているスクリプトの構造ですが、これをオブジェクト指向で組み立てるとどんなふうになるんでしょうか。
なんとなく本を読んでいてぼんやりとイメージが掴めかけていますが、では
実際自分が書いているものが、オブジェクト指向だとどんな風になって
どんなメリットがあるのか、が具体的に見えてきません。
どなたかわかりやすく教えて下さいませんか?

#おこられたので二つに分けます。
00656403/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{
# データ削除
}
######

宜しくお願いします。
0066nobodyさん03/08/09 14:56ID:???
>>64
おまえみたいな、甘えきった質問する奴は叩かれること必至ですが?
■ このスレッドは過去ログ倉庫に格納されています