2012年4月WebProg351: Webでオブジェクト指向プログラミング (431) TOP カテ一覧 スレ一覧 2ch元 削除依頼
【PHP】セッションについて語ろう!【PHP】 (818)
現在最速で最軽量のプログラムの組み合わせはなんだ (107)
【Python】TurboGearsスレ Part 1【Framework】 (172)
PostWikiスレ 当ての無い旅路へ (215)
XSL/XSLT (540)
よくあるプログラムミス (172)

Webでオブジェクト指向プログラミング


1 :05/12/02 〜 最終レス :11/12/12
サーバーサイドWebプログラミングのOOスレです。
・OOP、MVC、デザパタなどのコンセプト的な話題
・OOにまつわる言語比較(言語批判はその言語で開発してる人に失礼にあたることが多いのでなるべく禁止でお願いします)
・保守、再利用、生産性、開発環境などの実践的な話題
・Webサーバ、DBなどの外部との親和性に関する問題
・学習、教育などの方法論
などなど。
前スレ
PHPでオブジェクト指向プログラミング
http://pc8.2ch.net/test/read.cgi/php/1113724557/

2 :
乙カレーション。
ついでにズザー

3 :
見かけた関連スレ(内容未確認)
PHPとJAVAさぶれっと
http://pc8.2ch.net/test/read.cgi/php/987850713/
オブジェクト指向perl
http://pc8.2ch.net/test/read.cgi/php/1022604696/
ウェブプログラミングで使えるデザインパターン
http://pc8.2ch.net/test/read.cgi/php/1069451782/
【PHP】フレームワークについて語るスレ【総合】
http://pc8.2ch.net/test/read.cgi/php/1123608068/
CGI VS PHP VS JAVA
http://pc8.2ch.net/test/read.cgi/php/1006006800/
Python vs Ruby vs PHP vs Perl
http://pc8.2ch.net/test/read.cgi/php/1124710112/
WEBアプリにもっとも適した言語は何か?
http://pc8.2ch.net/test/read.cgi/php/1130115690/
良質なサイトや書籍など、情報ある人プリーズ

4 :
>>3
ゴミ情報邪魔

5 :
>>4
うるさいわね

6 :
MVC はともかく、デザパタとか入るとメタ議論好きが入ってきそうだなぁ。
適宜ム板、マ板に誘導していかないと。

7 :
そうだね。
とりあえず議論がWebプログラミングに関係なくなった時点でスレ違いってことで。

8 :
前スレのスレタイと比較すると、ぱっとみJAVA関連のスレと
思ってしまう俺は古い人間なのか?

9 :
ここはSmallTalkスレですよ?

10 :
webページレベルではオブジェクト思考でなくてもまぁ、苦労はしないけど、webシステムになると、データやモジュールをクラス管理しないとやってられない。この板でスレ違いって言う人間こそスレ違い。

11 :
素人趣味プログラマですが、
綺麗にOOが書けません><
プロの方のソースを拝見させてもらうと感動します><

12 :
>>10
それは別に Web に限らないからスレ違いなのでは?
むしろ webprog でやらない方が有意義になると思われ
>>11
ごめん、それはどれのこと?
公開されてるやつで、プロが書いたかどうか分かるものってあるの?

13 :
>>11
Apahce JakartaプロジェクトやStrutsプロジェクトなど、
オープンソースソフトウェアのソースコードは公開されているから参考にしてみれば?

14 :
>>1乙。
このスレ、荒れるだろうねえ。

15 :
>>14
俺様が荒れないように見張っているので大丈夫だ。安心してくれ。

16 :
>>14
議論で荒れるならいいけどね。
アホとかバカとか低脳な荒れ方はしないといいんだけど。

17 :
JavaScriptでOOって無理があるだろ
派生クラスだとprivateプロパティとして使いたい部分が共有されてしまう。
全部publicならできるのか?

18 :
<?php
class State{
var $user;
var $pass;
var $host;
var $database;
function State($user,$pass,$host,$database){
$this->user = $user;
$this->pass = $pass;
$this->host = $host;
$this->database = $database;
}
function GetCon(){
$con = mysql_connect($this->host,$this->user,$this->pass);
if($con && mysql_select_db($this->database,$con))
return $con;
else
return NULL;
}
}

19 :

class TEST{
var $con;
var $sql;
var $data;
function TEST($user,$pass,$host,$database){
$d = new State($user,$pass,$host,$database);
$this->con = $d->GetCon();
}
function MakeSQL(){
$this->sql = "SELECT user,host FROM user ";
}
function RunSQL(){
$rst = mysql_query($this->sql,$this->con);
if($rst)
for($i=0; $col=mysql_fetch_array($rst) ; $i++)
$this->data[$i] = $col;
else
return NULL;
return 1;
}
}

20 :
class MAIN{
function MAIN($user,$pass,$host,$database){
$obj = new TEST($user,$pass,$host,$database);
if($obj->con){
$obj->MakeSQL();
$obj->RunSQL();
$this->ShowData($obj);
}
else
printf("error");
}
function ShowData($obj){
for($i=0;$i<sizeof($obj->data);$i++)
printf("%s,%s<BR>",$obj->data[$i]["user"],$obj->data[$i]["host"]);
}
}
?>

21 :
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<META http-equiv="Content-Style-Type" content="text/css">
</HEAD>
<BODY>
<?php
$d = new MAIN(MySQLユーザー名,MySQLパスワード,"localhost","mysql");
?>
</BODY>
</HTML>
>11
PHPでやるとこんな感じ?
ひねりやセキュリティーは無視したけど
概念だけならこんな感じで十分だと思う
ま、アクセス権の関係で動かないかもね

22 :
static $con;
if ( $con === null ) {
とか、やりたくならんか?

23 :
>>17
なぜJavaScript?
>>22
それだとインスタンスごとにコネクションを保持っていうスタンスから外れるね。

24 :
どっちかっていうと
static $instance = false;
if ($instance === false) {
$inctance = new . . .
じゃないのphp4ならだけど

25 :
>>24
それってもしかしてシングルトンの話じゃ・・・?

26 :
VOがDB持ってるのって概念的に変じゃね?

27 :
>>17
普通にプロトタイプOOできるよ
アクセス制限したければprototype.js使うとか

28 :
JSって名前の隠蔽が関数かブロックのローカルスコープでしかできないからOO的な隠蔽は無理だよね。
あの言語は興味としては面白いけど、OOを生かした開発向けじゃないと思うけど。
つーかサーバーサイドでJSやってる奴いるの?

29 :
シラネ。
隠蔽やポリモーフィズムは他言語と変わらん。

30 :
出た!ポリモーフィズム!

31 :
>>30
じゃあ何て言うんだよこの馬鹿が。

32 :
>>30-31
他所へ行って構わなくてよ。

33 :
このスレ、ネタがないね。
とりあえず思ったことを書いてみるテスト。
MVCのM(MVCフレームワークに寄りかからない場合でもビジネスロジックをつっこむ部分)の設計について。
Webの場合は細かいエンティティをModelにしてしまうとかえって見通しが悪くなるから、割と大雑把なくくりでModelにした方が設計しやすい+実装しやすい+パフォーマンス的にも良いんだよね。
でもそうすると、関数でもいいものがメソッドになっただけで、ベタ書きロジックのラッパに過ぎないような実質シングルトンがいくつもできたりして。
それってオブジェクト指向という考えから反対方向に行ってしまってる。
形だけがオブジェクト指向風になってるって感じ。
もうちょっと勉強してくるわ。

34 :
もうちょっと具体的に頼む

35 :
単に設計がいまいちなだけじゃね?
ちゃんと考えて組めば、Mだけ客によって取り替えてウマーに出来ると思う。
まあ外向けとかで見栄えも気にするならMに加えてVも弄るから、分けずにMV+Cでもいいじゃんって発想?

36 :
PHP5でオブジェクト指向プログラミングって、
仕事ではまだほとんどやってない?

37 :
PHP 5 がまだなのかオブジェクト指向がまだなのか
どっちを聞きたいんだろ

38 :
PHP5からオブジェクト指向とったら何も残らないじゃん。

39 :
PHP5の仕様を学びながら同時にオブジェクト指向も学べるっていう
素敵本ってないですかねぇ?

40 :
>>39
OOやるならJavaのがいいと思う。
実際のところPHPだけでOO理解できた奴いるの?

41 :
まぁいいサンプルがあればいいんじゃないの?
おれは知らないけど

42 :
PHP5で__CLASS__ってやるとクラス名を取得できるけど、staticメソッド内で
abstract class Hoge { static public function method() { echo "Fuga"; } }
class Fuga extends Hoge {}
Fuga::method();
これで"Fuga"って表示させる、みたいな。

43 :
ごめん、日本語が中途半端だった。
× これで"Fuga"って表示させる、みたいな。
○ これで"Fuga"って表示させるにはどうしたらいいですか?

44 :
お前が質問したいのはそういうことじゃないだろ

45 :
あ、飽くまでecho "Fuga"っていうのを使わずに__CLASS__とかgetなんちゃらname()とかそういう類で"Fuga"を取得したいという意味です。
get_class($this)のstatic版みたいなのはないですかね?

46 :
ムリ
俺もこの仕様はなんとかならんものかと思ってる
但しその例だと
Fuga::method() →Fugaにない→親クラスのメソッドが呼ばれる
オーバーライドされていないため実際にはHuga::method()がコール
されるわけで親クラスの名前(Hoge)が表示されるのは正しい動作だと思う

47 :
Hugaって何だHogeだよHoge

48 :
staticはクラスメソッド的なニュアンスだしな
下で隠蔽しなきゃそのまま晒される

49 :
みなさんどうもです。
無理ですかねぇ。ちょっと頑張ってみたけどやっぱ無理でした。
abstract class Hoge {
static public function method() { echo self::getMyName(); }
abstract static protected function getMyName();
}
class Fuga extends Hoge {
static protected function getMyName() { return __CLASS__; }
}
Fuga::method();
staticメソッドってオーバーライドできないんですね・・・。

50 :
self::でサブクラスのメソッドが呼ばれるわけなかろ。

51 :
OO的には、staticメソッドは各クラスに固有のものだから
オーバーライドという概念自体が存在しない

52 :
>>38
オレ自身は半信半疑だけどスピード上がってるんでしょ?

53 :
>>50 >>51
納得。そうなんですか。継承はされるのに・・・、と考えるとむつかしいですね。
まあとりあえずできました!!
abstract class Hoge {
static public function method() {
$bt = debug_backtrace();
for ($i = 1; $i < count($bt); $i ++)
if (empty($bt[$i]["type"]) or $bt[$i]["type"] != "::" or $bt[$i]["function"] != __FUNCTION__)
break;
echo $bt[$i - 1]["class"];
}
}
class Fuga extends Hoge {
static public function method() {
parent::method();
}
}
Fuga::method();
超微妙・・・。デバッグでもなんでもないのにdebug_backtraceとか超微妙。

54 :
>>42
なんで、そういうことをしたいか?って書けば
別解がでるんじゃね?

55 :
>>54
返事が遅れて申し訳ない。・・・といってもその間にレス来てないけどw
実際にはデバッグの目的でログを取るのに、staticメソッド内で呼び出したサブクラス名を__CLASS__みたいに手軽に取得できないかを探し始めたのがきっかけでした。
その意味ではdebug_backtraceを発見したのでそれで問題解決なんだけど、元の質問をしたときには確か似たような問題を見た記憶があって、もうちょっと一般的な問題のように扱えるかも・・・とでしゃばってみた限りですorz
まあ時間的に少し余裕があったし、今後似たような状況(例えば可変クラスとか)も起こらないとは言えないってこともあって、色々考案してみました。
以下は一般的にはこうするのが(ベストとは言えないまでも)一番マシじゃないかなぁ〜という、ちょっとした提案
abstract class Hoge { static public function method($name = __CLASS__) { echo $name; } }
class Fuga extends Hoge { static public function method($name = __CLASS__) { parent::method($name); } }
Hoge::method();
Fuga::method();
サブクラスにメソッドの実装を強制できない点が痛いけど>>53よりマシかなって程度で。
まだマニュアルを引きつつ勉強中な身なんで、つっこみとかあったらよろしくです。

56 :
強制したきゃしろよ

57 :
Movable Typeの11行目の、
use MT::Bootstrap App => 'MT::App::CMS';
って、どういう意味ですか?
分かるエロくない人、どうかお教えください。

58 :
すみません、MT 3.2(日本語版)のmt.cgiの話です。
あと、勝手にMovable Typeがオブジェクト指向と判断してます。

59 :
>>57
エロいので教えない

60 :
Javaライクな(クラスの)パッケージ管理はPHPではでけへんの?
__autoload() を使おうとするとどうしても一つのフォルダに
クラス定義ファイルを全部ぶち込むことになるんだけど

61 :
いけたっ
ぷー

62 :
>>60
__autoloadの中を頑張ってつくればある意味Javaのパッケージより柔軟に色々できると思う。
今即興で考えてみたけどこんなのどう?
function __autoload($class, $newdir = "") {
 static $dirs = array();
 if ($newdir) $dirs[] = $newdir;
 if ($class) foreach ($dirs as $dir) {
  $file = "$dir/$class.class.php";
  if (file_exists($file)) { require_once $file; return; }
 }
}
function add_import_dir($dir) {
 __autoload("", $dir);
}
なんか書いてて虚しくなってきたよ・・・

63 :
自クラス内のプロパティーにも
セッターゲッター介してアクセスする?
あるいは自分の中のことだから
直アクセスする?
Dotch?

64 :
>>63
自分のクラス内なんだから直アクセスでしょ。
クラス内でもセッタゲッタしたいってことは、そのプロパティによっぽど整合性が必要なんだろうから、場合によっては必要な部分だけabstractなクラスとして抽出して問題のプロパティをprivateにする。
ってそれWebプログラミングとどういう関係があるの?

65 :
宗教論争させたいだけでしょ

66 :
なんか仕込みがあるならともかく
別段論争になるようなことじゃないと思うけど

67 :
>>>64
やっぱりそっか。
さんくすこ。
>>65
そんなわけナス

68 :
大域変数にするか問題と同じだな。

69 :
>>62
手間をかけさせて悪かった
やってみる

70 :
Ruby on Railsとかいうのがお目見えしたことだし
スクリプト系はMVC的に糞ってなことにはもうならないな

71 :
パッシブは別に糞じゃないだろ

72 :
>>70
RoRはぶっちゃけあんまり流行る気しないんだが。
あれってMVC?

73 :
PHPじゃそうかもな。rubyやperlはもうコレで決まりだと思う。

74 :
いやRuby自体がWebプログラミング方面でそれほど伸びないと思う。
Rubyの方がPHPより先に世の中に知れ渡ってたらRubyの圧勝だったかもしれないが、今更PHPと比較して生産性高いとも思えないし(飽くまでWeb方面では)。

75 :
そこで、pythonですよ!

76 :
Π損はメタクラス以外見るべきところが無い希ガス

77 :
rubyは構文が特殊すぎるし、まんまオブジェクト指向だから、phpのような流行り方をすることはそもそもありえなかったと思う。
unixハッカーな人たちにはperlやrubyが今後も支持されていくでしょう。phpは違う層の人たち向け。

78 :
ちょwww
unixハッカーってなんだwww
そりゃC使いry

79 :
cは別物。phpはもっと別物だけど。

80 :
WebでOOするときってどんなクラスつくるの?
MVC以外で。

81 :
オブジェクト指向言語は、OOがphp使うような素人の馬鹿避けになってる所は有るね。
phpの生産性って、素人を安い人件費で大量に使えるってだけだからねえ。
RoRは馬鹿には理解出来ないから、流行る事は無いだろう。流行るためには馬鹿でも理解出来る事が必要だし。

82 :
RoRのレベルが高いと思ってるおばかさんが一人いるぞw
Lisp信者にもその考えの奴多いんだよなぁ。

83 :
ざっくり言ってphpユーザはレベルが低い

84 :
ユーザのレベルなんて人それぞれだし、スレ違いでは?

85 :
phpしか書けない香具師に、LispやRoRは無理。

86 :
この言いっぱなしの駄レス連発してるやつって一人でやってんの?

87 :
はいはいわろすわろす
って言ってほしいんだろきっと。
LispはまだしもRoRを難しいとか言う奴初めて見た。
PHPしかできない奴のレベルが低いってのはまあ当たり前の話だが。

88 :
>>57-58
すみません、エロくても大丈夫になりましたのでどなたか教えてください。。。
分かった事
MT/Bootstrap.pmが関係?

89 :
あ、これはただ単にハッシュを渡しているだけなのですか?^^;

90 :
スレ違いだって

91 :
>>90
まあアレだ、Ruby厨には聞いていないから帰れということらしい。
>>57-58
Bootstrap.pmでimport関数に%param{App}を渡していると思うのだがその辺調べてみてくれ。

92 :
ここで解説はイラネ。
配布スクリプトの読めない部分を解説しちゃる
ttp://pc8.2ch.net/test/read.cgi/php/1094842959/l50

93 :
>>85
なんというか、馬鹿丸出しな発言だな。
そもそもRoRが使えれば、Ruby使えるわけだから、
PHPしか使えないなんてことは成り立たないわけで。
逆にRoRしか使えないやつはPHP使えないしな。

94 :
でもPHP使いよりRuby使いの方が仕事出来るのが事実。

95 :
>>94
まじ?
俺、今、Rubyを勉強しているんだけど、プロになれる?

96 :
>>94
はじめからそう言えばいいのに、頭が悪いから>>85みたいな言い方になってしまったんだね。

97 :
「○○使い」なんて言語限定してる時点でそいつは使えない

98 :
RubyでWeb開発とか趣味以外でやってる人いるの?

99 :
>>98
とりあえず、仕事で使われてるのをみたことがないな
あと、Ruby関連は書籍がちゃんとしたのが少なくない?
ってかすれ違いなんで、こういうのはマ板で

100 :
誰も100をとってくれない件について

101 :
0x64なんてキリ番じゃない。

102 :
誤:使えない
正:使わない

103 :
試しにあげてみる

104 :
>>99 影舞

105 :
PHPのthrowって例外オブジェクトがどこまでも飛んでいくから便利だね。
でもスパゲティの原因になったりしない?
いったいいつcatchされるんだろう・・・?みたいな。
もしくは、ここのcatchは何のためにあるんだろう・・・?みたいな。
Javaの場合throws書かないといけないけど。
そのまま便利さを享受すべきか、全てのメソッドにthrows相当のものをコメントとして加えておくべきか、ご意見いただけると幸いですw

106 :
俺の場合は、catchした上で処理を継続できるような場合はコメントに
@throws で記述しておく。
処理を続行できないような致命的な例外の類は一切キャッチしない or
トップレベルですべての Exception を catch するようにしてる。

107 :
使い捨てなら気にせずthrowしまくるけど、ある程度規模が大きくなってきたら問答無用で@throws書いたほうがいい。

108 :
自作のphpフレームワークを公開して見ました。
一応MVCモデルとオブジェクト指向プログラミングに基づいて作成しています。
もしよろしかったらご覧いただければ幸いです。
http://pharon.lolipop.jp/

109 :
>>108
Webサイトが思い切りテーブルレイアウトで萎えた。
普通に見出しと本文でいいじゃん。
なんか怪しげなローマ字とか使ってるし。
詳しくは読んでないけど、まずはその素人臭さを払拭しないと
使ってみる気にもなれんね。

110 :
整形済み文字にする必要性がわからん

111 :
あちこちにマルチし過ぎだしな。
まぁ、本人とも限らないが…。

112 :
pharonの読み方を教えてください

113 :
ファロン?

114 :
ファロン ファーロン 有名ピカソ

115 :
たぶんファーロンじゃないかな?

116 :
過疎りすぎw

117 :
期待age。
で、 Web サイトを PHP で組もうと思ってるんだけどオブジェクト指向でやったほうがベター?
まだ覚えてないけどな 。

118 :
>>117
PHPでOOなんて無意味><

119 :
>>118
まだこんなこと言ってるやついるんだな

120 :
PHPっていったら、HTMLを直に操作する軽快感が一番重要でしょ。
クラスとか使いはじめると、この足取りの軽さが激減するし、だったらJAVA使ったほうが賢いのでは。
大体WEBプログラミングでオブジェクト指向を得意げに使うこと自体が、スパゲティ大好きって言ってるようなもんだな。

121 :
>>120
「だったら Java」ってやつは最初から PHP なんか使わないか、
PHP も Java も分かってないかのどっちかだな

122 :
私も以前は PHP で OOP なんてする必要ねーよと思っていた。
特に PHP4 のクラスの実装はクソなので OOP するのも面倒だなと思っていた。
しかし、デスマってるプロジェクトに投入されて、
そのプロジェクトが index0001.php4 とか index0134.php4などと
200個くらいのファイルを羅列しているのを見たとき、
たとえ、PHP4 であろうとも OOP を導入すべきだという主張にかわったよ。
OO でなくとも、Logic と View は分けるべきだ。
できるなら、MVC でお願いします。

123 :
>>1
Javaでは当たり前なことを
なぜこんなスレタイをたてるのか。
どうせならStrutsやJSF< Tapestry, Seasar2など
フレームワーク関係のスレタイにしておけばよかったのに。

124 :
>>17
一応JavaScriptでprivateにできるテクニックはあるあしい。
ローカル変数を使って。Ajaxに使われている
Prototypeというフレームワークもどきに使われているようだ。
かなり小汚いテクニックで読みにくいソースコードだが。

125 :
>>21
PHP4と5では違う。
publicやprivate宣言を忘れているぞ

126 :
>>122
しかし、PHPは未だに名前空間が無いから
PHP5からJavaライクなオブジェクト実装が
サポートされても使い勝手は相変わらず悪い。
ini_get()してからini_set()するのはもうウンザリ。
__autoloadだか忘れたがこれをうまくつかって
Javaのimportそっくりなことできそうにみえるが、
それも使い勝手が悪い。

127 :
>>123
フレームワークのスレあるじゃん

128 :
>>124
なんかムリにprivateにしなくていいじゃんと思うようになるよ
Perl も PHP 4 も運用でカバーしてるんだし

129 :
JSの場合はJava系みたいにインスタンス変数ごとにprivateっていう考え方よりも、Cのファイルスコープstaticみたいに、ファイルごと(モジュールごと)にローカライズ(隠蔽)するのが常套手段かな。
インスタンス変数はそもそも隠蔽する対象じゃないんだな。
2.0でclassとか拡張されてるから、また変わってくると思うけど。

130 :
>>122
MVCがいまいち理解できません。
どこがいいのか k w s k !

131 :
>>120
軽快感が重要というのは同意だけど、別にそれだけがPHPのメリットじゃないわけで。
クラスだって軽く使おうと思えば使えるし、お手軽なOOPという観点ならPHP>JAVAだと思う。
その分できないこともあるけどな。

132 :
あれー。MVCスレってなかったっけ?
寝ぼけてたか?

133 :
RubyとPHPはどっちが向いてる?

134 :
>>133
多分Ruby

135 :
PHPのような低機能な言語でさらにクラス機能まで減らすのはバカ。
そんなことしたら、バカみたいなコードしかかけなくなる。

136 :
>>135
そういうことはクラスを実際に何に使うのかあげてから言ってくれます?

137 :
>>134
ぐーぐるさん的には
PHP 2,320,000,000 件
Ruby 107,000,000 件
この圧倒的な差はいったい!?

138 :
PHPは変数のスコープを分けれない。それだけでもクラスを使う理由になる。

139 :
スコープは分かれてるけど、、、
名前空間がないってことか?

140 :
変数のスコープは分けれるけど、クラス名・関数名・定数名(クラス定数除く)のスコープが分けられないんだと思われ。

141 :
OOPの最大の利点は、再利用性が抜群に高いことだと思う。
自分はアクセスカウンターとか掲示板など、いろんな汎用スクリプトを作ってるんだけど
今後新しいスクリプトが簡単に作れるように、クラスモジュールを構築しながら作成してるから
開発効率がどんどんよくなってきている。

142 :
でも気づいたら2、3行の処理でも関数にしてる自分がいたり・・・するのは俺だけか

143 :
そもそもクラスって何書くの?

144 :
>>143
変数と関数

145 :
>>144
わかってない奴発見

146 :
>>145
正しいのを教えて。

147 :
>>144 でもあながち間違いじゃないが
クラスとは
一緒に使われる情報(データ・関数)をその中にまとめ、別々に使われる情報を除外するためのもの
です。

148 :
せんせい!ぜんぜんいみがわかりません><

149 :
PHP 限定で言えば global を書かずにコードを書く
ためにあると思っておいて間違いではない
コードにまとまりがないうちは不便だが、まとまりが
ない段階でダメだと思えばいい

150 :
それだったら普通の関数でよくね?

151 :
PHPだとそうなっちゃうよな

152 :
perlみたいにパッケージがあれば関数ライブラリだけでやってけるかも知れないが、PHPにパッケージはない。
代わりにクラスを使うしかない。

153 :
>>147
むしろなぜ分類(除外)するのか、というところにOOの本質があるのでは?

154 :
>>152
PHPのクラスがパッケージの代替でしかないなら、インスタンス化は無意味ってこと?
$hoge = new Hoge; $hoge->kansuu();
より
Hoge::kansuu();
の方が早いもんね

155 :
インスタンスにしないと継承でけんやん

156 :
継承とかPHPで使ってるの見たことない。
グローバル変数使わないだけなら定数使うとかあるし

157 :
ばりばり使いますよ
フレームワークなんて継承前提だし

158 :
インスタンスにせんでも継承はできまっせ

159 :
>>150
普通の関数でいいと思うならそれでいけばいいじゃんてことでしょ
つかそういうスレつけてる人はこのスレ覗く必要全然ない

160 :
・関数がいい人は関数でやればいい
・クラスがいい人はクラスでやればいい
↑ここまではおk。それじゃ、
・クラスがいい人は何のためにクラス使ってるの?しかもPHPでw ←いまここ

161 :
OOP関係の本なら大概載っている
1.カプセル化
2.継承
3.ポリモフィズム
の、3つが何故良いのかを説明できれば、OOPの利点が見えるんじゃないの?
詳しい人↓よろ。

162 :
いまだにクラスを何に使ってるの、なんて聞く人がいるの?

163 :
1.カプセル化
2.継承
3.ポリモフィズム
ならJavaのほうが初めからそういうふうに設計された言語だけあって有利じゃないの?
PHPのクラスにそういう利点て見出せないな。

164 :
>>162
みんなのために説明よろしく。

165 :
>>158
本当だ…
ちゃんと親クラスの関数にアクセスできる。
てっきりインスタンス時点で合成されるのかと思ってた。

166 :
PHPはもともと関数志向?的な作りだから、
OOPに最適化されているとは言いがたいんだけど、
それでもクラスは使った方が便利だよ。

167 :
それじゃなぜPHPを使うの?

168 :
総合的に見て、実用性に秀でているから。

169 :
>>164
みんなのためだなんて嘘書かないの。
ぼく分からないから教えてって言え。

170 :
>>169
ぼく分からないから教えて
これでいいか?さあ早く教えろ。

171 :
カプセル化 【encapsulation】
読み方 : カプセルか
分野 : プログラミング > オブジェクト指向
オブジェクト指向プログラミングが持つ特徴の一つ。
データとそれを操作する手続きを一体化して「オブジェクト」として定義し、オブジェクト内の細かい仕様や構造を外部から隠蔽すること。
外部からは公開された手続きを利用することでしかデータを操作できないようにすることで、個々のオブジェクトの独立性が高まる。
カプセル化を進めることによりオブジェクト内部の仕様変更が外部に影響しなくなり、ソフトウェアの保守性や開発効率が高まり、プログラムの部分的な再利用が容易になる。
で、PHPで実用的なカプセル化ってどんなのよ?

172 :
>>171
PHP(4)ではカプセル化は無理。
だから、コメント上で、
どの情報にはアクセスできてどの情報はアクセスを禁止するかを明言する必要がある。
だからPHP(4)に関して言えば、OOPによるカプセル化の利点はない。

173 :
Singleton前提のクラスは
インスタンス化する必要ないってことでOK?
でもコンストラクタでの初期設定ができないか…

174 :
PHPにおけるOOPの利点は、言葉で伝えてもなかなか分からないと思うので、
応用例を作ってみました。
文字列を1文字ずつ読み出すスクリプトです。
ソース
http://trashtoy.dw.land.to/app/chartest/chartest.zip
実行例
http://trashtoy.dw.land.to/app/chartest/sjis-test.php
http://trashtoy.dw.land.to/app/chartest/euc-test.php

175 :
>>173
例えば >>174 のソースの中にある
euc_jp_reader クラスや shift_jis_reader クラスなんかは Singleton 前提のクラスですが、
char_iterator クラスのコンストラクタの引数となるため、インスタンス化してやる必要があります。
Singleton 前提のクラスを敢えてインスタンス化する利点の一つは、
ポリモルフィズムが応用できるってことかな。

176 :
>>175
なるほど
○他の関数の引数に出来る
○その結果クラス名を指定しないメソッド呼び出しも可能になる
(ポリモーフィズム)
ってことだね

177 :
>>174
2つ質問がある。
・そのスクリプトの中で、Webサイトを構築する上で有用な情報はどこにあるの?
・そのスクリプトの中で、JavaやRubyに対するPHPの優位性はどこにあるの?

178 :
・そのスクリプトの中で、Webサイトを構築する上で有用な情報はどこにあるの? 
ごめん。意味を正しく受け取ることが出来なかったんだけど、要は
「それを使って何か実際に役に立つものが作れるのか?」
ってことで良いですか?
これは自作の XML 解析モジュールに応用してます。
レンタルサーバーみたいに、外部モジュールを自由に導入できない
(すなわち libxml モジュールなどが使えない)環境のために作りました。
・そのスクリプトの中で、JavaやRubyに対するPHPの優位性はどこにあるの?
知りません。もしかしたら Java や Ruby のほうが優れているんじゃないんですか?
別に PHP が Java や Ruby より優れてなきゃいけない理由なんてないし。

179 :
1つ目の質問についてだけど、いちおうWebProg板だしWebプログラミングでオブジェクト指向っていうのがテーマなスレだから、あんまりズレないようにしないとね。
XMLの解析に使ってる点はいいんじゃない。お疲れさん。
2つ目は他の言語でなくなぜPHPなのかって話題が出てたから聞いてみただけ。
PHPしか知らないってのも理由の1つとしてはいいけど、馬鹿にされるからあまり言わないほうがいいかもね。

180 :
>>179
そういうしょうもない煽りは
【戦場は】PHP王とJava乞食【エンタープライズ】
http://pc8.2ch.net/test/read.cgi/php/1140124172/
こっちでやれ

181 :
>>171の続き
継承 【inheritance】
読み方 : けいしょう
別名 : インヘリタンス
分野 : プログラミング > オブジェクト指向

オブジェクト指向プログラミングにおいて、既に定義されているクラスをもとに、拡張や変更を加えた新しいクラスを定義すること。
元になるクラスを「スーパークラス」(super class)、あるいは「基底クラス」「基本クラス」(base class)などと呼び、新たに定義されたクラスを「サブクラス」(subclass)、あるいは「派生クラス」(derived class)と呼ぶ。
スーパークラスの性質はすべてサブクラスに受け継がれ、サブクラスではスーパークラスとの違いを定義するだけでよい。
複数のスーパークラスから新しいクラスを定義することを多重継承という。
で、PHPで実用的な継承ってどんなのよ?

182 :
>>181
普通にやれ

183 :
>>182
普通とは?

184 :
なんだこの流れ
PHP のスレは大量にあるんだからどこでも使えよ
単に PHP をバカにしたいやつはもうこないでくれないか
本当に知らないのならもっと真摯に勉強しろ

185 :
>>184
そう言い捨てて意味のあることを書かない(書けない?)人が多いんですよこのスレ。

186 :
それ以前に意味のある質問したことあるんですか?

187 :
その質問は意味があるんですか?

188 :
>>181
>>174 で晒したソースは、
PHPでの実用的な継承 (っていうか、別に普通だけど) の例でもあると個人的に思うのですが、
これだけだと伝わりませんでしたか?

189 :
この流れじゃあ
「オブジェクト指向意味ワカランから本買うけど何がいい?」
なんて厨な質問できねーYO!

190 :
>>174
いや、そんな自己満コード晒してもらっても

191 :
>>189
ぱっと思いつくのは
憂鬱なプログラマのためのオブジェクト指向開発講座―C++による実践的ソフトウェア構築入門とか
>>188
OO分かってない奴にいきなりコードを見せても
チンプンカンプンだと思う

192 :
>>127
だから重複してるからイランと

193 :
>>128
JavaやC++のように大規模開発でも使う場面が
多い言語ではprivateは重宝するよ。
なにせprivateをうまく使うとデバッグがしやすいしバグもとりやすく
テストもしやすくソースコードの信頼性も上がる。

194 :
>>137
PHP使えるレンタル鯖が多いからだろ。
Ruby使える鯖は少ないし
Rubyというだけで日本人が作った言語だから
ショボイと思われがてで不キュしていなかったと思われる。

195 :
>>143
この本を読めばクラスの使い方がわかるようになるよ。
超お勧め。
Amazon.co.jp:アジャイルソフトウェア開発の奥義: 本
http://www.amazon.co.jp/exec/obidos/ASIN/4797323361/249-2469696-1854764

196 :
>>156
おれはよく継承を使いまくってる。
将来拡張する予定があるものは
かならず(空でもいいので)スーパークラスを作って
継承してつかっている。
継承は使い方を間違えたり勘違いしている人間が使うと
継承=拡張そのものだと
誤解してだたやみくもに継承しまくることがあるので、
継承を使いこなしたければ
デザインパターンについてよく勉強した方が良い。

197 :
>>160
> ・関数がいい人は関数でやればいい
> ・クラスがいい人はクラスでやればいい
> ↑ここまではおk。それじゃ、
> ・クラスがいい人は何のためにクラス使ってるの?しかもPHPでw ←いまここ
大規模化する可能性のあるソフトをPHPで作るとき。
顧客がPHPを使えと言ってきたら
PHPを使わざるを得ない。けれどもオブジェクト指向を
使わないで開発すると一体どんなとんでもない目に
あうのか散々味わってきたので
漏れはかならずオブジェクト指向でPHPコードを書く。

198 :
継承 = inheritance
拡張 = extends
なんだよな・・・・

199 :
>>163
それに関してはPHPでもJavaでも同じように実現できている。
PHPで問題なのは名前空間と型安全性問題。
メソッド引数に型指定もクラスしか使えないこと。
integer型やstring型などをメソッド引数に指定できないのが
今のPHP5の難点。Javaでいえば引数の型をObjectにしているようなものだ。
Perlでも同様だが。

200 :
>>171
PHP5はどうみてもJavaのパクリとしか
思えないほど十分にオブジェクト指向できるような
言語となった。問題なのは上でも述べているとおり
名前空間と型指定の曖昧さ、ほかに戻り値の型を指定できないことだね。

201 :
>>199
PHP6もgoto付けるとか言ってないで
そのへん整備すりゃいいのにな

202 :
>>174-175
そんなに汚くないコードだけど
ちょっと抵抗があるソースコードだな。
クラス名が全部小文字で
名前空間の替わりの役割を果たしているわけでもないのに
区切り文字に_(アンダースコア)つかうという
表記を未だに使っているとは・・・・。
やっまりキャメルケース(CamelCase)がわかりやすいと思うのだが。
それから一ファイルにつき一クラスにしておくのがベスト。
一つのファイルに複数のクラスを入れておくことはお勧めしない。
ファイル名とクラス名も一致させておく。名前空間が使えないので
そこだけ例外的にクラスだけ名に_(アンダースコア)を使う。
詳しくはPEARライブラリのソースコードを見てみてくれ。
それから文字コードがEUCだとは。
Unicode(UTF-8)で統一してくれれば
DBとのやりとりも楽なのだが。

203 :
>>188
悪いがあなたが書いたソースコードが実用的な例だとは
とても思えない・・・・。
あのコードがPHPで有ろうとJavaに置き換えようと実用的になるとは
とても思えない。

204 :
>>190
オブ脳
オブジェクト脳のつくりかた
で良いんでないかな?

205 :
>>198
PHPやJavaではextendsで継承しているともいうし拡張するともいう。
しかしクラスそのものを拡張しているだけであって
それによってそれだけで簡単にソフトウェアの拡張性が高まるとは限らない。
という落とし穴に気をつけないといけない。
その辺りを素早く理解するにはデザインパターンを学ぶことをお勧めする。
この本は初心者には非常にわかりやすいので
かなりお勧め。
増補改訂版Java言語で学ぶデザインパターン入門
http://www.hyuki.com/dp/

206 :
>>201
gotoか。Javaみたいに例外処理限定や
ラベル付きbreak, continue文だけにgoto同様の機能を
限定的に持たせるだけにしてくれればいいのだが・・・・。
C#みたいにJavaのラベル付きbreakやcontinueをgotoキーワードで
実装すると言うだけのレベルだろうか?

207 :
188はTemplateMethodの実例を見せたかったんだろ
俺は悪いコードだとは思わないが

208 :
>>205
結城本はガチだな
ただOOPはじめたばかりの人がいきなり分かるほど
簡単だとも思わないが…

209 :
何でいまどきgotoなんだろ。
俺的には無限再帰を可能にしてwhileとforみたいなダサいもんも排除した
関数言語にして欲しいと前から思っているんだけどそんな人いませんか。

210 :
Gauche とか使えば?

211 :
PHPで継承はあんまり必要ないな。
使い道がないから。
ウェブでオブジェクト指向するなら、JavaScriptが一番使いどころが多い。

212 :
>>193
そりゃあれば使うよ
ないものねだりしてもしゃーないでしょってこと

213 :
finalとabstractとinterfaceが
とりあえずどんなものかは
わかったけど実際にどうやって
それを有効利用できればいいか
わからない香具師に結城本はおすすめだと思う。

214 :
>>211
> ウェブでオブジェクト指向するなら、JavaScriptが一番使いどころが多い。
まてまてw それはJavaの間違いではw

215 :
>>212
privateの利点が解らない香具師はあっても使わない。

216 :
デフォルトがprivateだったらすげー便利だったのになぁ。

217 :
Javaだったらデフォルトでpackage privateになるのにな。
publicと明示的につけないとパッケージ外部からアクセスできなくなる
ってことが名前空間がないPHPではできないから
デザインパターンの実装も中途半端になる。

218 :
>>215
そんなやつの話を持ち出されても知らない
ダメコーダに強制できないとかいう話ならご愁傷さま
としか言いようがないですな

219 :
>>213
俺も最初そのへん「これ必要か?」と思ったな
他の人(近未来の自分含む)に対しての「使われ方の説明」を
ソースの中に機能的として組み込むものだとわかって
得心した。

220 :
PHP6のgotoは、gotoというキーワードが実装される訳ではなくて、
for () {
if () {
break foo;
}
print "bar\n";
foo:
print "baz\n";
}
こんな感じに書けるようになるもの。

221 :
>>220
これならあってもいいかも。

222 :
>>199,200
型安全性ならis_arrayとかis_stringとかinstanceofでチェックすればいいだけじゃないの?

223 :
それはそうだが
何が求められているのかを知るために
中身まで見ないといけないのはあまりよろしくないだろう。

224 :
つ @param @return

225 :
動的型付け言語であるPHPで、型を指定したいってのがそもそも可笑しな話なんだよな。
それでもタイプヒンティングみたいにオブジェクトの型を動的にチェックしてくれるようにする構文はいいアイデアだと思った。
Javaでいう変数の静的な型指定(つーかC/C++からだけど)と構文を似せたってのも良い。
JavaScript2.0なんかもそういう方向に行ってるね。
>>199
> integer型やstring型などをメソッド引数に指定できないのが
たぶんだけど、統一性の問題があるからだと思う。
例えば引数にintを指定したメソッドがあったとして、呼び出すときにstringを渡したからってエラーにすべきではないでしょ。
その辺の仕様がうまくいかないんじゃないかな。

226 :
>>220
普通にJavaのパクリじゃないか。
Java自体もCあたりからパクッタ者だが

227 :
>>222
以前もどこかのスレで議論があったが。
それだけでは以下の問題を解決できない。
$number = 9;
$value = 1;
$x = $number + value *2;
$y = $x * $x + 4 * $number;
$number = 1000;
$z = $x / ($y + $number);
とした適当なコードがあったとき、
あとから
$x = $number + value *2;
の部分を
$x = $nunber + value *2;
と書きかえても $numberと$nunberとの違いの
に気づかない。
そして路頭に迷ったあげくにデバッグに無駄に時間をかけることになって
開発速度が衰える。

228 :
>>225
Javaみたいにラッパークラスを作ってしまえばいいかもしれんな。
final class Integer extends Number {
 $private $value;
 __construct($value){
  if($valueがint型であれば){
   $this->value = $value;
  } else {
   throw new NumberFormatException("整数以外入力するんじゃねえぞこのバカ野郎!");
  }
 }
}

229 :
privateに$が余分についていた。
あとは適度に必要な変換メソッドを追加しておくべし。
intValue()とか

230 :
>>228
お、いい方法じゃん!って一瞬思ったけど、
function method(Integer $param)
を呼び出すときmethod(10)って書けないし><
>>227
えーっと、それは型安全性の問題なの・・・?

231 :
>>227
コンポーネントに対する入力値と戻り値をちゃんとチェックするような
ユニットテストを書いとけばいいんじゃないの?

232 :
>>227
それは単なるタイプミスだ。

233 :
>>230
ひとこと「それだとAUTO-BOXINGが欲しくなるな」と言えばいいのにw

234 :
>>233
つ 「それだとAUTO-BOXINGが欲しくなるな」
満足戴けたかな?
PHPみたいな型なし言語なら、Javaみたいなプリミティブ型とそのラッパークラスのオートボクシング/アンボクシングだけでなく、もう少し汎用的な自動型変換が欲しいところだな。
function method(int $x) {}

method("100");
っていうふうに呼び出したならintにキャストするくらいの自動化はあってもいいと思う。
(今あるPHPのタイプヒンティングだと、型が違うとエラーっていう設計だから)
もともとPHPは変数の実行時における型が文字列か整数かを意識しなくても適宜変換してくれるように設計された言語なわけだし。

235 :
>>234
type hintingのメリットが台無しじゃね?

236 :
>>234
それなら、
function method($x)
{
$x = (int) $x;
}
でいいんじゃないの?

237 :
>>232
型宣言しておけばミスに即座に気が付く、
のだけれどあれだと気づかない。

238 :
>>235
メリットって?
>>236
間違えて配列やオブジェクトを渡したときに自動的にエラーを出してくれるかもしれない。
もちろんis_intで確認してエラー出せば同じことだから絶対なければならないっていう必然性はないけど、あったら便利かとは思う。
あとタイプヒンティングでintやstringなどの基本型だけは指定できないっていう今の状況より統一感あるかと。
オートボクシングや構文糖と考え方は一緒ね。

239 :
PHPでそんなことするくらいなら、素直にJava使うわ。

240 :
引数に型書くだけの話やんけ

241 :
普通のclassと、
abstractなclass,
interfaceは、
クラス名から変えた方がいいんかな?
どうやってる?

242 :
>>241
俺はabstractもinterfaceも普通の名前にしてる。
abstractやinterfaceをある特定クラスの仕様だけ抽象したことを表現したい場合に限り「Abstract〜」とか「〜Interface」にするかも。
例外だったら「〜Exception」てつけるけど。

243 :
>>241-242
というか、C#やC++みたいに継承も実装もおなじ::をつかっているわけではなく
PHPはjavaのようにちゃんと継承はextends、インターフェース実装はimplements
を使うように指定されているから
名前を見ただけでインターフェースかクラスかわかるようにまでしなくてもええと思う。
IDE使えば名前指定しなくてもさらに一目でわかるし。PHPのIDEはよくわかんないけど

244 :
>>242-243
レスさんくす
あんまり考えすぎなくてもいっか

245 :
質問です。
ビジネスロジックとドメインロジックとアプリケーションロジックは、プレゼンテーションロジックと対比的な位置づけですが、基本的に同じものですか?

246 :
>>245
使用する分析・設計手法によって、使われる用語とその定義は違ってきます。
こういうインフォーマルな場では、それぞれが別の立場・定義で勝手に用語を使う
ことが多く、基本的な認識がすれ違ったまま不毛なレスが飛び交うのが常です。
まずは専門書で系統立った知識を得てから、自分なりの経験と知見を積んでいけば
その類のどーでもいい疑問は解決すると思われます。

247 :
プロパティをtrue/falseにするメソッド名ってそれぞれどんな命名にする?

248 :
>>247
setTrue、setFalse
setOn、setOff

249 :
>>247
どんなクラスのプロパティを作るかがわかれば
自ずとそれに見合った名前がわかると思うんだが。
どうしても名前がわからないときは>>248のようになるが。
そのプロパティがオセロの駒であれば、
setWhite(), setBlack() みたいな名前にするだろうし。
もしくはset(Color.WHITE). set(Color.BLACK)など。
表、裏を表すなら setHeads(), setTails()など
0か1なら setZero(), setOne()または>>248のように。
あと、メソッドを複数にする必要も、メソッドに引数を
割り当てる必要もないケースであるケースもありうる。
trueだったらfalse, falseだったtrueに反転するだけのメソッド
public void reverse(){
 this.flagment = !this.flagment;
}
を定義するだけのものとか。

250 :
反転ならtoggleを使いたくなる

251 :
スレを読まずに書くけど。
俺オブジェクト指向ってよくわかんないのね。で、
PHPでさ、テーブルごとにクラス作ってその中で
SQL発行してるソース見て思ったんだけど。こういう
のってテーブルのJOINはどう扱ってんの?

252 :
だからそれはテーブルじゃなくてデータオブジェクトです

253 :
良スレ発見

254 :
>>247
enableXXX/disableXXX
>>251
railsのactiverecordとか調べてみればいい
テーブル同士の関係の属性を設定して取れるようになっている
でもSQLを元にデータを取得することもできるし
複雑なJOINの場合はSQL書くのが推奨

255 :
OOPを0から学ぶとすると、やはりJavaが最適なのでしょうか?
Railsで有名になったRubyでもよさそうですが、
どれを勉強しようか悩みます。
どちらも実行環境を整えるのが自分にとって一苦労な気がするので、
今まで環境が作りやすいPHPに逃げていましたが、
一向にOOPの概念がわからずじまいで、
本格的にJavaかRubyを入れてやってみようと考えています。

256 :
>>255
つ ttp://smalltalk.cincom.jp/scripts/smalltalk.dll/tutorials/index.ssp

257 :
オブジェクト指向プログラミングの学習が目的なら、ウェブアプリやっても無駄だと思うよ。GUIのあるデスクトップアプリ作った方がいい。

258 :
> オブジェクト指向プログラミングの学習が目的なら、ウェブアプリやっても無駄だと思うよ。GUIのあるデスクトップアプリ作った方がいい。
はいはいわろすわろす。

259 :
GUIのプログラミングで身に付くのはオブジェクト指向よりむしろイベントドリブンだよね。

260 :
>>258
ある意味>>257は言い得てると思うぞ。
WebアプリはWebならではの都合で、本来のオブジェクト指向には反する設計を
強制される場面も少なくない。

261 :
webアプリでがちがちのオブジェクト指向やると重くならね?

262 :
もっと抽象的な議論しようぜ。

263 :
>>262
犬とか猫とか?

264 :
リクエストがあったらhtml吐き出して終わり、なタイプのwebアプリでは
オブジェクト指向はあまり身につかない。
なにしろ、インスタンスの寿命が短かくて、全員が突然死するわけだから、
時間軸がそっくり抜けてるのだよ。
気にしながらライブラリを作れば、ソースの構造的な部分はある程度身につくかな、くらいだろう。

265 :
JavaでWebアプリしかやらない人は、J2EEパターンとかDIコンテナとか使って
「オブジェクト指向」と思っているんじゃないかな?
今のJavaのWebはレイヤー構造や
ドメインモデル(エンティティ)とビジネスロジックを完全に分離した設計、
ステートレス・スレッドセーフ・request/sessionスコープなどが優先されて、
本来のオブジェクト指向信者から見ると、論理的にあまりきれいな設計ではない。
とは言える。
言語レベルを超えた「モデリング」(UML等は使っても良いが)を
そのまま実装にまで落とすには無理がある。

266 :
要するに Java なんかつかうやつはばかですってこと?

267 :
JavaでWebなんて業務外では使わないしどうでもいい。

268 :
>>266
OOPを極めたいという目的だけのために
JavaでWEBをやるならバカと言えよう。

269 :
本気でオブジェクト指向やりたいならウェブでは役者不足ってこと。

270 :
役者不足(笑)

271 :
Actorが不足してるわけですな。

272 :
OOの概念を把握したりOOの組み方を学ぶだけなら
PHPでもそれなりに勉強できると思うけどな
PHP5で書かれたフレームワークやライブラリのコードを眺めてみたら

273 :
これとかいいかもね。
PHPによるデザインパターン入門
http://www.cbook24.com/bm_detail.asp?sku=4798015164

274 :
それOOをまったく理解できなかった俺が買ってみた
どうなるか人柱になるわw
著者でググったらブログが一番上にヒットした

275 :
PHPのデザパタ入門ってどうなんだろうか。
レビュー期待www

276 :
>>272
その言葉を信じて眺めてるんだが、
なんかごちゃごちゃしてて返ってわかりづらい・・・
コメント英語で何書いてるかわからないし。
やっぱ俺みたいな凡人は丁寧に解説してるサイトに限るな。

277 :
一口にオブジェクト指向って言ってもメッセージ主体かクラス主体かで変わってくるからね。
C++, Java, PHP は後者。前者は Smalltalk, Objective-C, io とか。

278 :
>>276
簡単なライブラリから眺めていけばいいよPEARのDBとか
OOPを一番手っ取り早く理解する方法は
OOで適当な分野のライブラリを自分でコード書いてみる事
当然よく分からないうちはコードは汚い
なのでPEARで同じような分野のライブラリコードを眺めて
どういう構造なのかを調べてみながら自分のコードを書き直す
それの繰り返しで把握していくもんだと思う
いきなりデザパタの勉強とかやってもあんまり意味がない
OOPを理解していく上でどういう局面で
どういうパターンを使ったら良いという事がわからないから
パターンってのは結局ノウハウの事だし
ノウハウってのは必要に応じて生まれて出来上がっていくもんだから
ノウハウ自体を先に説明されてもピンとこないはず
英語は勉強するしかないがまめに単語の意味を引くようにしておけば
文法を正確に理解してなくてもだいたい把握できるようになるはず
ネットならすぐに調べられるんだからそのコストは無駄にはならない
コードは万国共通だ
ごちゃごちゃしてても所詮はPHPのコード、Cやアセンブリじゃない
ゆっくり読んでいけばわかる
小さなライブラリでもよくできてるライブラリはたくさんある
その区別がつくようになっていけば
自ずといいコードも書けるようになるだろう

279 :
オブジェクト指向について語るとき、
「どのような概念か」と「どう使うのか」
を分けないで話すとひどいことになる、
ということだな。

280 :
>>278
PEARってOOPで書かれてるの?
クラスからインスタンスをnewして使うってのが多いですね。
>>279
って>>273の本の説明の仕方がごっちゃでよくないってことなんですか?

281 :
昨日本を読んでみた。
サンプルコードが載っていて分かりやすかった。
UMLの説明はさすがに他書で勉強しないと、このページ数じゃフォローできんね。
(ないよりましだけど…)
デザインパターンが活用できるようになれば、OOPが楽しくなるだろうなー☆\(^o^)/

282 :
届いたよ!
眠くてまだ読んでない
ちょっと開いたけど

283 :
このスレ、
サーバサイドプログラミングでのOOかよ
期待して損した・・・

284 :
>>283
クライアントサイドのOOPっていうと、JavaScriptでやるんですか?

285 :
WebObjectsがフリーになるから 勉強しといたほうがいいぜ

286 :
>>285
Thanks!!!
http://ja.wikipedia.org/wiki/WebObjects
http://www.apple.com/jp/webobjects/

287 :
半分くらい読んだけど、7章が無いのが残念だった
そこらへんは著者さんのブログやサイトを参考に補完することにしようorz

288 :
>>273
それ買って読んでみてる。
今5章の途中だけど
いまいちピンと来ない。
おれがアホだからだと思う。

289 :
PHP5のマニュアル(オブジェクトとクラスの項)とJava入門書を読み始めたばかりなんだけど、
PHP5とJavaのメソッドオーバーロードって全然別物なの?

290 :
スクイークに詳しい人いる?

291 :
>>288 PHPのオブジェクト指向を先に覚えるより、CやVBなどのプログラムを覚えたほうが
組み方は理解できるよ。短時間で

292 :
>>291
スパゲッティソースの量産方法を理解できると言うこと?

293 :
>>289
Pythonから始めたら、PHPもJavaも楽勝
という漏れはPascalが初体験の相手だった

294 :
なんかPHPerは無条件でオブジェクト指向マンセーしてる奴が多いよな・・・
手続き型の進化系がオブジェクト指向ってわけじゃないからね
手続き型的なロジックが有効なところもあればオブジェクト指向が有効なところもある
俺が確かに言えることは、オブジェクト指向は少なくとも万能ではないってこと
だからオブジェクト指向で書かないとスパゲティになるとかわけわかんないんだよ
むしろオブジェクト指向によって作られたスパゲティの方が多いという現実さえあるのに・・・

295 :
>>294
誰も藻前の妄想なんか聞きたくないわけだが。

296 :
まぁ考え方が増えたってことでいいんじゃない?

297 :
コードがアチコチに飛ぶって意味では、gotoも多態を使いまくったトリッキーなコードも
スパゲッティには変わりないよ。

298 :
正直、オブジェクト指向で作られたソースがさっぱり理解できないのだが・・・
もうダメなのかな俺

299 :
何言語でどういう部分が分からないの?

300 :
Javaで作られたCMS。ソースにコメント一切無し。
消えた前担当が全然ドキュメント残してないってのもあるが、Perl使いの俺にはサパーリ。
まぁ何だ、愚痴だ。スマン。

301 :
>>298 これわかる?
Webより抜粋 PHP (編集しました)
******************************************************************************
*    class Shopping {
* ク  var $item = "コンピュータ";                   これがメンバ変数の設定
*    var $price = 99800;                         コンピュータが99800
* ラ  ************************************************************************
*     function getTotal() {
* ス   $tax = $this->price * 0.05;
*     return $this->price + $tax; // 税込価格の設定     これがメソッドの定義
*     }                                    消費税の設定と選択した商品に消費税を加える定義
*     }
******************************************************************************
$result = new Shopping();         上記で指定したクラスをnewステートメントを使ってオブジェクトに格納します    
$item = $result->item;
print("$item の会計は".$result->getTotal()."円になります\n");   これが表示結果
******************************************************************************

302 :
>>301
そこまで親切にコメント書いてあれば流石にわかるなぁ。
っていうかphpのオブジェクト指向って変に見辛いな。

303 :
VB系のプログラム言語と識別子が逆だからめんどうだよね

304 :
PHP4のオブジェクト指向が中途半端だからいけない

305 :
PHPはオブジェクト指向言語ではありません

306 :
>>305
それだから、PHPでオブジェクト指向はしない...と思っていたんだけど
最近ちょっとずつやってみている。
しかし一番最初に触った言語がPHPだったもんだから、この前
C言語を勉強しているときに「あー、やっぱPHPって気持ち悪いな」って思った。
なんか仕様がグダグダだし、10年くらいすれば忘れられそうだなとか思った。

307 :
10年後には確実に気持ちいい言語になってるのがPHPだけどな

308 :
それだけは無いな

309 :
10年前のPHP3の時は地獄のようでした

310 :
オブ脳とPHPデザパタを読んでオブジェクト指向というのを実践しようとしたけど、
ちゃんとわかってないからか、酷いスパゲッティーになる気がして途中でやめた。
中途半端なオブジェクト指向を解説してるところはないのかな。
俺の今の思考↓。
クラスのメリット
・関数を纏められるの。
・纏めた関数だけ扱う変数を作れる。
・継承のおかげで、元は残したまま拡張した纏まりを別の場所で使える

311 :
よし、オブジェクト指向で書くぞ!って書くもんじゃなくて
気づいたら知らぬ間にOOで書いてるもんだ

312 :
>>310
クラスを処理関数郡的に捕らえると、クラスが肥大化したりするかもな。
どちらかというと、データに処理機能を添わせると考えた方がよさそげ。

313 :
手続き型で書かれたスクリプトをclassで囲んで、
処理を関数で小分けして、例外かましただけ、
みたいなのあるよね
継承、再利用、知るかボケみたいな
俺がまさに今やってることだけど(´・ω・`)

314 :
他の人はどうか知らんのだけど、俺個人レベルでは
再利用や拡張のためにクラスを書いたり継承したりはあんまりない。
多態性を持たせるための手段として継承させる程度かな。
PHP5時代の本は買ったことないのだけど、PHP4の時代は
継承による拡張ばかり取り上げていて、カプセル化とか多態性の
ことはあまり取り上げられてなかった希ガス。まぁPHPもデザパタが
取り上げられているので多態性については出てくるでしょうけどカプセル化は?
PEARのDB(MDB2)もFetchモードがObjectのとき、StdClassだけじゃなくて
XmlSerializerみたいにクラスを指定できたらいいなと思うのは変?
>>310にあるメリットは、結果であって目的ではないと思う、
と思えるようになった今日この頃w

315 :
オブジェ糞指向はだな
人類は新しいパラダイムを発明してくてる天才を必要としている

316 :
オブジェクト指向はどう見ても最高だろ

317 :
PHPでは、結局、カプセル化、抽象化できる部分をクラスにして、
手続き型の部分から呼び出す方法に落ち着いた
MVCでいうと
Mをクラスで、Cを手続き型で、Vをテンプレートエンジンでやるというのが
わかりやすくてよいと思った。
ポリモーフィズムって、PHPで実現するのが面倒だと思うけど、どう?

318 :
djangoでいうMVTだな。

319 :
>>314
>継承による拡張ばかり取り上げていて、カプセル化とか多態性の
>ことはあまり取り上げられてなかった希ガス。
そもそも4はメンバメソッド全てがパブリックなんで、
カプセル化の概念自体皆無。
説明しようにも、カプセル化の機能自体が無いので不可能。

320 :
>>319
言いたいことはわかるけど、概念自体皆無とか不可能ってのは言い過ぎじゃね?
そもそもオブジェクト指向ってオブジェクト単位で独立した存在にするだろ。
だから、カプセル化=独立 であって カプセル化=隠蔽 ではないと思う。
PEARもPrivateメソッドやフィールドは先頭にアンダーバー(_)をつけるなど、
コーディング規約で決めてるわけだし。
もちろん、規約であって言語仕様じゃないから、
簡単にアクセスできて崩壊してしまうがの。

321 :
カキコ後に読み直して
> カプセル化=隠蔽 ではない
は言い過ぎだったかな。
オブジェクトを独立させる為にカプセル化を行う。
隠蔽はカプセル化を厳密に行う手段(手法)ってことでどぉ。

322 :
>>320
そんな規約定めてるPEAR自身、アンダーバーがついてるプライベートであるはずのメンバに
パブリックアクセスしてる件について

323 :
>>321
4の解説書なんだから、コーディング規約のことまでいちいち面倒見る必要無いだろ。
概念として説明してもかえって紛らわしいだけ。
だからPHP5が生まれたわけで。

324 :
>>317
PHPのような型無し言語はポリモーフィズムだらけです。

325 :
>>324
型なしといわずに「動的型」といってあげて

326 :
おk。次から挑戦してみる。

327 :
それぞれの型クラス作ればいいんじゃね?

328 :
と言いますと?

329 :
>>327
それおもしろそうだな。
symfonyのsfMixer使ってやれば、
意外とそれなりにつかえるもんになりそう。
まぁ、ぐちゃぐちゃになりそうな気もしなくも無いけど…

330 :
type hintingでstringとかintも使えるようにすりゃいいのにな
そんなに難しくもなさそうだし

331 :
phpのtype hintingはでstringとかintも使えるようにって話は時々話題になるけど、もし導入するとしたら、
function hoge(string s) {・・・
っていう定義の関数をhoge(12);で呼び出した場合、エラーにすべき?例外投げるべき?暗黙的にキャストすべき?

332 :
わざわざtype hintingに記述する=厳格な型を要求してる
と考えられるから
事前にstringにキャストされてたらok
int等ならfatal errorじゃない?

333 :
オブジェクト指向よくわからんから
とりあえずpearのDB呼んでみる。

334 :
>>322
stringとintの違いを意識しなくてもコードを書けるのが、ほとんど唯一のPHPの利点なのに・・・

335 :
>>334
PHPの利点すくな!

336 :
例えば掲示板投稿処理で
入力処理
画像処理
ログ処理
表示処理
とかにクラスが分かれている場合、それぞれでオブジェクトを作成するの?

337 :
ま、まぁそうしたければそうすればいいんじゃない?

338 :
なにその突き放したレス

339 :
ままぁ、そうしたければそうすればいいんじゃない?

340 :
ままままぁ、そそうしたければね

341 :
オブジェクト指向っていうものは聞いて覚えるもんじゃない。
体で感じるんだ。

342 :
2ch型掲示板を作る時はオブジェクト指向でやったなあ

343 :
「PHPによるデザインパターン入門」を始めてみた。
いきなりTemplate Method ではまった。
本の通りに打ち込んでるのに、クライアント呼んでも
画面が空白のままだ。
試しにクライアントの中で文字列出力をしてみると、
スクリプトの先頭では出力できるけど、require_once
以降ではechoしても出力できない。
var_dumpでnewしたオブジェクトを表示させようとしても
空白だ。
何だこの現象は。

344 :
ちなみに、読むだけなら5章まで進んでるけど、オブジェクト指向を
軽いノリで始めるにはPHP5は結構いい感じに思えた。

345 :
>>343
エラーメッセージは表示される設定になってるのか?
ダウンロードしたソースを実行してるのか
自分で打ち込んで実行してるのか?

346 :
出来るならワンタッチで、しかも「情報起業」に特化した
ホームページ作成ソフトがあったらいいのに・・・。
もし、プロ並みにキレイなホームページが作成が出来たとしたら、
情報商材で一旗あげようと思っているあなたの人生は変りますか?
【早くも成功者続出!】起業サイトビルダー
http://www.infotop.jp/click.php?aid=16484&iid=5683

347 :
>>345
環境はPHP5.2.1 Apache2.0.59 WindpowsXP です。
error_reportingは E_ALL | E_STRICT っす。
だけど、HTML吐かれてるんだよね。で、そのHTMLソース見ると、
スクリプトに指定もしてないDOCTYPE宣言とか、METAタグとか、
空のBODYタグとか入るんだけど、これどういうときなるんだろ?
ちなみに、頭に叩きこうもと思って自分で打ち込んだやつ。
ダウンロードしたやつは動いた。違いといえば、require_once
のところを別の<?php ?>ブロックにしてないところだけど・・・。

348 :
おそらくどっかでHTMLモードに入ってる
?>の後に空白とか入ってないか確かめてみ

349 :
ダンプ吐いて、地道に変数をトレースしか無いんじゃね。
ちなみに echoじゃなくて、var_dump()の方

350 :
>>348
?>の後の空白はなかったです。
ほかにもHTMLモードに移行するような箇所はなし。
もっかい見てみますけど・・・。
>>349
echoもvar_dumpも出力してくれません。どうやっても、
DOCTYPE宣言、METAタグ、要素が空のBODYタグが出力され、
結果、真っ白な画面に。
しかし、こんな簡単なスクリプトで・・・。
php.iniの問題でしょうか?phpinfo()は動いてますが。
オブジェクト指向と関係ない話で申し訳ない。

351 :
PHPスクリプトファイルの文字コードは何で保存しているの?
UTF-8で保存しているなら、BOM無しのUTF-8Nで保存し直したら、空白が直るかもしれないよ。
UTF-8とUTF-8Nの違い=BOMについてはGoogleで検索して!

352 :
折れもBOMには、ハマったよな
フリーのエディタの中には、デフォでBOMを付加する設定になっていたりする...
UTF-8のBOM付きでは、PHPは動かなかった!

353 :
>>352
--enable-zend-multibyteでコンパイルしたPHPならBOMありでも大丈夫だよ

354 :
OOPで実装する時はJAVAとか統合環境がしっかりしてるほうが
分業の切り分けもしやすいと最近思った。
クラスが2、3個とか済む軽いのはPHPでさくっと実装するけど。
要件で言語指定がないとき、みんなの言語の選定基準って何?

355 :
BOMを処理できないPHPは

356 :
でも小便でも、
サクサク開発できるPHPは良い

357 :
あげとくか

358 :

「ウェブ社会をどう生きるか」「iPhone 衝撃のビジネスモデル」「低度情報化社会」
http://iiyu.asablo.jp/blog/2007/06/05/1556512

359 :
私書箱システム(webでログインしてメッセージが読めるシステム)で、
・ユーザーAがユーザーBにメッセージを送る
・ユーザーBにメッセージ到着メールを送る
・システム管理人にメッセージ到着メールを送る
このとき、私書箱メッセージもメール形式でmail classから処理できるようにするとして、
mailオブジェクトを3つ作って処理って普通ですか?

360 :
3つオブジェクト作ってもいいし、オブジェクト1つで宛先とか送信内容をタスクに合わせてその都度変更してから送信で良くないか?
どっちを採用してもおかしくないよ。

361 :
>>359
まずその仕様をオブジェクト指向にしたい理由を言って下さい
メリット・デメリットなど
その後にその仕様の目的にあったクラス構成を議論したいです

362 :
オブジェクト指向にあったロジックと
そうでないロジックが存在する

363 :
しかし何でPHP5は寸前のところでnamespaceをなくしてしまったのか。
クラス名をアンダーバーで繋げるという回避策は悲しすぎる。
唯一悔やまれる点だわ。

364 :
クラス名をアンダーバーで繋げれば、
問題が解決するからじゃね?

365 :
遅延静的束縛がPHP5.3.0以降じゃないと使えないのが萎える。
あれがあればいろんなものをStaticなまま呼び出せるのにー。

366 :
厨でスマソ
それってクラス名得る以外に使い道あるの?

367 :
staticってか、 オブジェクト指向でいこうよ と厨房がいってみる。

368 :
オブジェクト指向でつくったモジュールのなかにクラスが参照するサブルーチンを
書くのって、やはり負けですかね。なにがなんでもクラスとして記述した方がいい
でしょうか?

369 :
>>368
クラスで書かないと便利わるくね?
悪くなければ、便利がいいように書けばいいのでは?

370 :
>>368
クラスが参照するサブルーチンて書いてあるけど、ちょっと意味かわからない

371 :
>>368 369
ええっとですね、hoge.pmないに、コンストラクタとクラスを書くのが
オブジェクト指向でのモジュールですが、その中のいくつかのクラスが
使い回せるサブルーチン(例えば、変数が英数かチェックするサブルーチン)
を書いておく、という感じです。 
そうするといくつかのクラスの中で英数チェックを共通かできるので。
ただ、英数チェックなどそういうチェック部分だけをオブジェクト指向
モジュール化してという方法もありますが、いまいち、決めかねています。
一般的にはどういう感じでやっているのかなぁとアドバイスを求めた次第です。

372 :
ええっともっと簡単にいうと、hoge.pm(オブジェクト指向モジュール)の
中にある特定のクラスが処理として行なう共通な部分(たとえば英数半角チェック)
を抜き出して、それをサブルーチンとしてhoge.pmの中に記述して、クラスが
使うようにする(メインプログラムcgiが直接利用するのではない)、という
のは、手法としてはどうですか?
という意味です。オブジェクト指向でつくられたモジュール内のサブルーチンは
簡単にいってクラスとして書くけど、単なる英数半角チェックルーチンをサブルーチン
化した場合はそれはクラスというよりやっぱり単なるサブルーチンでしかない
ですよね?
いや、その半角英数チェックのサブルーチン内で処理後の変数をあらたに定義
すればその半角英数チェックのルーチンはクラスとしていってもいいとおもいますが。

373 :
それ、普通のPerlのパッケージの作り方だよ。

374 :
なんかしらんけど、FormValidator::Simple とかつかえばよくね。

375 :
あなたも動画サイトを運営しませんか?
動画検索ロボットが毎日動画を自動収集!!
アクセスアップ間違いなし。
もちろん海外のサーバーなので違法性も一切ありません。
完全無料!!いくらでも動画サイトを作成できます。
http://sxv.xgun.tv
▼mixiのトピックです。
http://mixi.jp/view_bbs.pl?id=33336111&comment_count=0&comm_id=326589
▼自分のmixiです。
http://mixi.jp/show_friend.pl?id=15652823

376 :
オブジェクト指向って一言でいうとなんなんですかって後輩に聞かれた。
おま、一言でいえるかっての!

377 :
>>376
オブジェクト指向が一言で表したものだから、って言えば良いよ。

378 :
関数付き変数=オブジェクト指向

379 :
Trapezoidクラス
upper 上底
lower  下底
height 高さ
それぞれのアクセッサ
コンストラクタで初期値を設定
面積を求めるメソッド calcArea()
現在のフィールド値を画面に表示するshow() メソッド
誰かおしえてください

380 :
日本語でおk

381 :
web専用言語にOOPなぞいらん

382 :
なんかOOPでやると、
日ごとにincludeするファイルが増えていくような気がする
昔はファイル一枚あればいいだったのに
ってか、はっぱ隊とかウンナンとか10年ぶりぐらいに思い出したような

383 :
保守age

384 :
PHPで学ぶデザパタとかいう本はいいものなの?
アマゾンンの読者レビューでは褒められてたけど。

385 :
読み手のレベル次第

386 :
オブジェクト指向初心者。
継承と多態の意味くらいが分かる。

387 :
>>379こゆこと?
class Trapezoid
{
private upper ;
private lower ;
private height ;
function __construct( $u , $l , $h ) {
$this->upper = $u ;
$this->lower=$l;
$this->height=$h;
}

}

388 :
宿題だろうに1ヵ月後に解答してあげるとかひどすw

389 :
>>388
うむ。やはり宿題か。だったら
面積求める抽象クラス

継承して作った四角や三角
っていうのが本当に伝えたかったことじゃないだろかなんて思った。

390 :
MVCに関する質問です。
利用者ごとにログインし、見た目をカスタマイズ出来るような仕組みを考えています。
で、ログイン状態やユーザー情報というのはModelに相当すると思うんですが、
見た目の情報はModelには入りませんよね。
そもそもViewの情報はどこで管理すべきなのか。
Viewで良いのか。だとして、ユーザー情報との同期はどうとれば良いのか。
分からないところだらけですが、よろしくお願いします。

391 :
分かって無さすぎ

392 :
それは自分でも重々承知しているわけで、
だからこそ質問しているわけですが・・・

393 :
ちゃんと基礎から勉強した方がいいよ

394 :
質問できるレベルにさえ達していない。
前提知識がないから、回答する側も途方にくれてしまう。
入門書等でWEBアプリってどういう風に作るのか、大まかにつかんだ方がいいかも。

395 :
フレームワークのチュートリアル見れ

396 :
これって現行スレだったのかw

397 :
うわー オブジェクト重視っぽく書いていったらソースコードが500行余裕で超えた。
class hogeClassUnit extends dbConnectBase{
private var $name; // 以下20項目くらい
public function set_name($str){ // 受け取ったデータを加工したり精査したりでこれも20項目くらい
public function get_name(){ // クラスから取り出すだけ 以下20項目くらい
public function register(){ // ここまできて、登録とか何たらとかの処理を書き始める。
こういう風に細かくやるのが普通なのでしょうか?
単純なことが多いとはいえ、ずいぶんとソースコードが長い

398 :
律儀だなw
OOPの表面だけ真似るんじゃなくて本質を学んだほうがいいと思うぞ

399 :
粒度を上げるのだ

400 :
class a {
function getA(){
{
return new b('hoge');
}
}
class b{
public $a;
protected $_z;
public function __construct($data)
{
$this->a = $data+$data;

$this->_z = $data;
}
}
上記のような、クラスがあって、aから、bが返されるのですが、bのprotected
のデータを取得したい場合はどうすればいいでしょうか。
たとえばbを継承したb'を作成し、zを取り出すメソッドを作っても、bのインスタンスを作成しているのは
aなのでb'のインスタンスは作られないですよね。

401 :
よく分からんが
>たとえばbを継承したb'を作成し、zを取り出すメソッドを作っても、bのインスタンスを作成しているのは
>aなのでb'のインスタンスは作られないですよね。
aでb'のインスタンスを作るように変更すればいいのでは。
>上記のような、クラスがあって、aから、bが返されるのですが、bのprotected
>のデータを取得したい場合はどうすればいいでしょうか。
getZというメソッドを作るのはだめなの?

402 :
ああ何となく分かった、既存のaにもbにも手を加えたくないのか
変更しないで挙動を変えたいなら、それこそa'とb'を作ってメソッドをオーバーライドするしかないかと

403 :
やっぱりオーバーライドするしかないですか。
有難う。

404 :
おいおいおい!!こんなのあるのかよ!
http://okamikakushi.net/jp/wbiyhi1
俺やってみたけど、マジ寝てるだけで金くれたぞ!!

405 :
治験ですね分かります

406 :
他のプロジェクトで作成したフレームワーク、クラス、抽象クラス、インターフェースを
再利用したも猛者はいるか?

407 :
>>406
そんなのどこでもやってるだろ。

408 :
>>406ばっちりだ

409 :
ていうか再利用できない/しないフレームワークなんて嫌だな

410 :
javascriptでツールチップを作れっ!オブジェクト指向チックによろしく!
って言われたら、どのようなオブジェクトを作りますか?

411 :
まず
クライアントサイドプログラムはWeb制作板へ
って言います

412 :
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script>
//<!--
window.onload = function(){
  kanako = createGirl('かなこ');
  miku  = createGirl('みく');
  haruhi = createGirl('ハルヒ');
};
/*
* クローンを作成
*/
function createGirl( name )
{
  var superClass = new girlClass();
  var superClone = function(){};
  superClone.prototype = superClass;
  //これで他に影響ないクローン完成
  var instanse = new superClone();
  //いわゆるコンストラクタ
  instanse.myName = name;
  return instanse;
};

413 :
/*
* おんにゃのこクラス定義
*/
function girlClass()
{
  //プロパティ宣言
  girlClass.prototype.myName   = "";
  //振る舞い
  girlClass.prototype.writeMyName = function()
  {
    document.write("私は"+this.myName+"だよ。<br />");
  };
}
//-->
</script>
</head>
<body>
<input type="button" value="Execute" onclick="onClickExecute()" />
<script type="text/javascript">
function onClickExecute()
{
  //おんにゃのこに名前を言ってもらう。
  kanako.writeMyName();
  miku.writeMyName();
  haruhi.writeMyName();
}
</script>
</body>
</html>

414 :
おっそうかそうか

415 :
>>413
そんな事する意味が全くわからんwwww
なんのメリットがあるの??wwww
プロパティ宣言とかめっちゃウケルwww

416 :
オブジェクトなんちゃのサンプルの悪いところはそこなんだよな。
なんでそんなことしなくちゃいけないんだよってやつ。

417 :
window.onload = function(){
kanako = new girlClass('かなこ','girlmessage');
miku = new girlClass('みく','girlmessage');
haruhi = new girlClass('ハルヒ','girlmessage');
};
function girlClass( name , target )
{
girlClass.prototype.myName = name;
girlClass.prototype.target = target;
って書いたら全員ハルヒになったぞ

418 :
そうか、プロトタイプとはそういう事ね
親クラスとして定義されている関数は触るなと。
了解した。

419 :
>>415
>プロパティ宣言とかめっちゃウケルwww
ねーと使い方わからねーだろ屑

420 :
誰か2回 new している説明をお願いします。

421 :
.

422 :
残念だなあ。
君は何か勘違いしている様だけど、聞いて揚げ足取りをしたいんじゃなくて、
単純に君の意見が面白そうだから聞いてみたかっただけなんだよ。
もっとまともなレスを期待してたんだけど。ごめんね。
ちなみに君は揚げ足を取られる事を恐れているようだけど、それは違うと思う。
揚げ足を取られるのは、君に隙があるから。
隙だらけの人間ってのはそうやって余計な所でつまらない恥をかく事になるもんだよ。
他人につっこまれる事は、自身の知識をより客観的で多角的なものとする為に
有益な指針となるものだと思うな。

423 :
オブジェクト指向って単純にいうと
パラメーターと処理を
外部からひっかきますことができない思考ってことですか?

424 :
それは単なるカプセル化

425 :
パラメーターと処理を外部からひっかきますことができない思考 →カプセル化
CSSのカスケードみたいにカプセルを別のカプセルに引き継ぐ思考 →継承
?????? 思考 → ポリモーフィズム

426 :
オブジェクト指向のクラスの中身は、
手続き型の記述がカプセリングされて入ってる・・・
と思って間違いないですか?

427 :
間違いです

428 :
理由が無いので、信じません。
次。

429 :
ポリモーフィズムってなんですか?
継承元の親クラスが、なんなのか?によって、
同じ名前のクラスが 全く違う動きをする
みたいなかんじですか?
となると子クラスには、親クラスがこうの時はこう、
親クラスからこういうパラメータが取ってこれてたらこう
みたいな処理がかかれてるんですか?

430 :
>>429
特定のインターフェース規格に準じるということです。

431 :11/12/12
>同じ名前のクラスが 全く違う動きをする
そんなことされたら困ります
TOP カテ一覧 スレ一覧 2ch元 削除依頼
【PHP】下らねぇ質問はID出して書き込みやがれ 118 (433)
オマエラPHPで掲示板つくれませんか? (679)
Drupal node 8 (859)
PHP初心者勉強会やらんかね! (474)
二回入力させるUIはアホ (196)
インストールマニアックス4 azure祭り (147)
--log9.info------------------
杉田・神谷・小野・中村・宮野・福山を語るスレ 12 (760)
堀江由衣 喪失革命 (125)
【スフィア】sphereアンチスレ【ごり押し】 (455)
機動戦士ガンダムAGEの声優を語るスレ (609)
男性声優演技力評価スレ (231)
豊崎愛生が片岡あづさにどうしても勝てない理由 (489)
ゆいかおりスレ Part4 (589)
【スフィア】アンチミュージックレイン9【ごり押し】 (581)
大沢事務所よ しんでしまうとはなにごとだ 4スレ目 (512)
ミルキィホームズ イベント総合スレ part21 (226)
消えた声優14〜尋ね人の時間 (148)
声優CD売上雑談・予想スレッド393 (409)
竹達と花澤出すぎてウザい 2 (267)
花澤香菜のゴリ押しがミューレより酷い件 (372)
10年前キャスティング part4 (592)
【偽物語】西尾維新アニメ声優総合スレ5【めだか】 (407)
--log55.com------------------
暑すぎ(;´Д`) 42℃ごえ
Steamのラストレムナントが販売中止するんやけどw
Narrow No.83
RMEEA 2
YouTubeで大流行している「ファイアーチャレンジ」を真似したクソ樽が戦闘不能
DQXのディレクターに続きプロデューサ齊藤陽介が解任wwwwwwwww
King Arthroの形 その2
FF11が面白かった理由って結局ヒゲの有無だったのか?でもヒゲの新作は爆死