X



Webでオブジェクト指向プログラミング
0001nobodyさん
垢版 |
2005/12/02(金) 11:18:17ID:lnZM9OlM
サーバーサイドWebプログラミングのOOスレです。

・OOP、MVC、デザパタなどのコンセプト的な話題
・OOにまつわる言語比較(言語批判はその言語で開発してる人に失礼にあたることが多いのでなるべく禁止でお願いします)
・保守、再利用、生産性、開発環境などの実践的な話題
・Webサーバ、DBなどの外部との親和性に関する問題
・学習、教育などの方法論

などなど。

前スレ
PHPでオブジェクト指向プログラミング
http://pc8.2ch.net/test/read.cgi/php/1113724557/
0101nobodyさん
垢版 |
2006/01/07(土) 18:20:48ID:???
0x64なんてキリ番じゃない。
0102nobodyさん
垢版 |
2006/01/08(日) 16:02:42ID:???
誤:使えない
正:使わない
0103nobodyさん
垢版 |
2006/01/19(木) 01:21:15ID:Mz+RYmqL
試しにあげてみる
0105nobodyさん
垢版 |
2006/01/27(金) 12:31:26ID:61WrCUJb
PHPのthrowって例外オブジェクトがどこまでも飛んでいくから便利だね。
でもスパゲティの原因になったりしない?
いったいいつcatchされるんだろう・・・?みたいな。
もしくは、ここのcatchは何のためにあるんだろう・・・?みたいな。
Javaの場合throws書かないといけないけど。
そのまま便利さを享受すべきか、全てのメソッドにthrows相当のものをコメントとして加えておくべきか、ご意見いただけると幸いですw
0106nobodyさん
垢版 |
2006/01/28(土) 18:58:27ID:???
俺の場合は、catchした上で処理を継続できるような場合はコメントに
@throws で記述しておく。
処理を続行できないような致命的な例外の類は一切キャッチしない or
トップレベルですべての Exception を catch するようにしてる。
0107nobodyさん
垢版 |
2006/01/29(日) 22:11:15ID:???
使い捨てなら気にせずthrowしまくるけど、ある程度規模が大きくなってきたら問答無用で@throws書いたほうがいい。
0108nobodyさん
垢版 |
2006/01/30(月) 23:29:09ID:l8Eu1UQ7
自作のphpフレームワークを公開して見ました。

一応MVCモデルとオブジェクト指向プログラミングに基づいて作成しています。

もしよろしかったらご覧いただければ幸いです。

http://pharon.lolipop.jp/
0109nobodyさん
垢版 |
2006/01/31(火) 01:43:20ID:???
>>108
Webサイトが思い切りテーブルレイアウトで萎えた。
普通に見出しと本文でいいじゃん。
なんか怪しげなローマ字とか使ってるし。

詳しくは読んでないけど、まずはその素人臭さを払拭しないと
使ってみる気にもなれんね。
0110nobodyさん
垢版 |
2006/01/31(火) 10:49:03ID:???
整形済み文字にする必要性がわからん
0111nobodyさん
垢版 |
2006/01/31(火) 11:17:28ID:???
あちこちにマルチし過ぎだしな。
まぁ、本人とも限らないが…。
0112nobodyさん
垢版 |
2006/01/31(火) 13:18:08ID:???
pharonの読み方を教えてください
0114nobodyさん
垢版 |
2006/02/02(木) 12:00:05ID:???
ファロン ファーロン 有名ピカソ
0115nobodyさん
垢版 |
2006/02/03(金) 20:05:36ID:3T+q60Jd
たぶんファーロンじゃないかな?
0117nobodyさん
垢版 |
2006/03/27(月) 23:45:30ID:NOFET43q
期待age。
で、 Web サイトを PHP で組もうと思ってるんだけどオブジェクト指向でやったほうがベター?
まだ覚えてないけどな 。
0119nobodyさん
垢版 |
2006/03/28(火) 08:10:30ID:???
>>118
まだこんなこと言ってるやついるんだな
0120nobodyさん
垢版 |
2006/03/28(火) 09:41:36ID:64m8EIcO
PHPっていったら、HTMLを直に操作する軽快感が一番重要でしょ。
クラスとか使いはじめると、この足取りの軽さが激減するし、だったらJAVA使ったほうが賢いのでは。
大体WEBプログラミングでオブジェクト指向を得意げに使うこと自体が、スパゲティ大好きって言ってるようなもんだな。
0121nobodyさん
垢版 |
2006/03/28(火) 10:23:08ID:???
>>120
「だったら Java」ってやつは最初から PHP なんか使わないか、
PHP も Java も分かってないかのどっちかだな
0122nobodyさん
垢版 |
2006/03/28(火) 10:51:45ID:???
私も以前は PHP で OOP なんてする必要ねーよと思っていた。
特に PHP4 のクラスの実装はクソなので OOP するのも面倒だなと思っていた。

しかし、デスマってるプロジェクトに投入されて、
そのプロジェクトが index0001.php4 とか index0134.php4などと
200個くらいのファイルを羅列しているのを見たとき、
たとえ、PHP4 であろうとも OOP を導入すべきだという主張にかわったよ。

OO でなくとも、Logic と View は分けるべきだ。
できるなら、MVC でお願いします。
0123nobodyさん
垢版 |
2006/03/28(火) 12:02:55ID:???
>>1
Javaでは当たり前なことを
なぜこんなスレタイをたてるのか。
どうせならStrutsやJSF< Tapestry, Seasar2など
フレームワーク関係のスレタイにしておけばよかったのに。
0124nobodyさん
垢版 |
2006/03/28(火) 12:04:50ID:???
>>17
一応JavaScriptでprivateにできるテクニックはあるあしい。
ローカル変数を使って。Ajaxに使われている
Prototypeというフレームワークもどきに使われているようだ。

かなり小汚いテクニックで読みにくいソースコードだが。
0125nobodyさん
垢版 |
2006/03/28(火) 12:05:37ID:???
>>21
PHP4と5では違う。
publicやprivate宣言を忘れているぞ
0126nobodyさん
垢版 |
2006/03/28(火) 12:07:24ID:???
>>122
しかし、PHPは未だに名前空間が無いから
PHP5からJavaライクなオブジェクト実装が
サポートされても使い勝手は相変わらず悪い。
ini_get()してからini_set()するのはもうウンザリ。
__autoloadだか忘れたがこれをうまくつかって
Javaのimportそっくりなことできそうにみえるが、
それも使い勝手が悪い。
0128nobodyさん
垢版 |
2006/03/28(火) 12:40:59ID:???
>>124
なんかムリにprivateにしなくていいじゃんと思うようになるよ
Perl も PHP 4 も運用でカバーしてるんだし
0129nobodyさん
垢版 |
2006/03/28(火) 12:57:27ID:???
JSの場合はJava系みたいにインスタンス変数ごとにprivateっていう考え方よりも、Cのファイルスコープstaticみたいに、ファイルごと(モジュールごと)にローカライズ(隠蔽)するのが常套手段かな。
インスタンス変数はそもそも隠蔽する対象じゃないんだな。
2.0でclassとか拡張されてるから、また変わってくると思うけど。
0130nobodyさん
垢版 |
2006/03/28(火) 13:37:18ID:???
>>122
MVCがいまいち理解できません。
どこがいいのか k w s k !
0131nobodyさん
垢版 |
2006/03/28(火) 13:59:03ID:???
>>120
軽快感が重要というのは同意だけど、別にそれだけがPHPのメリットじゃないわけで。
クラスだって軽く使おうと思えば使えるし、お手軽なOOPという観点ならPHP>JAVAだと思う。
その分できないこともあるけどな。
0132nobodyさん
垢版 |
2006/03/28(火) 14:02:21ID:???
あれー。MVCスレってなかったっけ?
寝ぼけてたか?
0133nobodyさん
垢版 |
2006/03/28(火) 20:32:38ID:???
RubyとPHPはどっちが向いてる?
0135nobodyさん
垢版 |
2006/03/28(火) 21:42:58ID:???
PHPのような低機能な言語でさらにクラス機能まで減らすのはバカ。
そんなことしたら、バカみたいなコードしかかけなくなる。
0136nobodyさん
垢版 |
2006/03/28(火) 22:02:13ID:???
>>135
そういうことはクラスを実際に何に使うのかあげてから言ってくれます?
0137nobodyさん
垢版 |
2006/03/28(火) 22:06:27ID:???
>>134
ぐーぐるさん的には
PHP 2,320,000,000 件
Ruby 107,000,000 件

この圧倒的な差はいったい!?
0138nobodyさん
垢版 |
2006/03/28(火) 22:28:04ID:???
PHPは変数のスコープを分けれない。それだけでもクラスを使う理由になる。
0139nobodyさん
垢版 |
2006/03/28(火) 23:02:46ID:???
スコープは分かれてるけど、、、
名前空間がないってことか?
0140nobodyさん
垢版 |
2006/03/29(水) 02:32:56ID:???
変数のスコープは分けれるけど、クラス名・関数名・定数名(クラス定数除く)のスコープが分けられないんだと思われ。
0141nobodyさん
垢版 |
2006/03/29(水) 22:51:03ID:???
OOPの最大の利点は、再利用性が抜群に高いことだと思う。

自分はアクセスカウンターとか掲示板など、いろんな汎用スクリプトを作ってるんだけど
今後新しいスクリプトが簡単に作れるように、クラスモジュールを構築しながら作成してるから
開発効率がどんどんよくなってきている。
0142nobodyさん
垢版 |
2006/03/29(水) 23:13:01ID:???
でも気づいたら2、3行の処理でも関数にしてる自分がいたり・・・するのは俺だけか
0143nobodyさん
垢版 |
2006/03/29(水) 23:15:45ID:???
そもそもクラスって何書くの?
0147nobodyさん
垢版 |
2006/03/30(木) 15:06:58ID:???
>>144 でもあながち間違いじゃないが

クラスとは
一緒に使われる情報(データ・関数)をその中にまとめ、別々に使われる情報を除外するためのもの
です。
0148nobodyさん
垢版 |
2006/03/30(木) 16:16:42ID:???
せんせい!ぜんぜんいみがわかりません><
0149nobodyさん
垢版 |
2006/03/30(木) 16:29:49ID:???
PHP 限定で言えば global を書かずにコードを書く
ためにあると思っておいて間違いではない

コードにまとまりがないうちは不便だが、まとまりが
ない段階でダメだと思えばいい
0150nobodyさん
垢版 |
2006/03/30(木) 17:18:32ID:???
それだったら普通の関数でよくね?
0151nobodyさん
垢版 |
2006/03/30(木) 21:38:19ID:???
PHPだとそうなっちゃうよな
0152nobodyさん
垢版 |
2006/03/31(金) 00:12:08ID:???
perlみたいにパッケージがあれば関数ライブラリだけでやってけるかも知れないが、PHPにパッケージはない。
代わりにクラスを使うしかない。
0153nobodyさん
垢版 |
2006/03/31(金) 00:31:04ID:???
>>147
むしろなぜ分類(除外)するのか、というところにOOの本質があるのでは?
0154nobodyさん
垢版 |
2006/03/31(金) 05:07:58ID:mYeRlPC0
>>152
PHPのクラスがパッケージの代替でしかないなら、インスタンス化は無意味ってこと?
$hoge = new Hoge; $hoge->kansuu();
より
Hoge::kansuu();
の方が早いもんね
0155nobodyさん
垢版 |
2006/03/31(金) 05:13:33ID:???
インスタンスにしないと継承でけんやん
0156nobodyさん
垢版 |
2006/03/31(金) 05:31:31ID:???
継承とかPHPで使ってるの見たことない。
グローバル変数使わないだけなら定数使うとかあるし
0157nobodyさん
垢版 |
2006/03/31(金) 05:36:54ID:???
ばりばり使いますよ
フレームワークなんて継承前提だし
0158nobodyさん
垢版 |
2006/03/31(金) 08:04:27ID:???
インスタンスにせんでも継承はできまっせ
0159nobodyさん
垢版 |
2006/03/31(金) 08:09:59ID:???
>>150
普通の関数でいいと思うならそれでいけばいいじゃんてことでしょ

つかそういうスレつけてる人はこのスレ覗く必要全然ない
0160nobodyさん
垢版 |
2006/03/31(金) 08:38:38ID:???
・関数がいい人は関数でやればいい
・クラスがいい人はクラスでやればいい

↑ここまではおk。それじゃ、

・クラスがいい人は何のためにクラス使ってるの?しかもPHPでw ←いまここ
0161nobodyさん
垢版 |
2006/03/31(金) 08:56:52ID:???
OOP関係の本なら大概載っている

1.カプセル化
2.継承
3.ポリモフィズム

の、3つが何故良いのかを説明できれば、OOPの利点が見えるんじゃないの?
詳しい人↓よろ。
0162nobodyさん
垢版 |
2006/03/31(金) 08:59:41ID:???
いまだにクラスを何に使ってるの、なんて聞く人がいるの?
0163nobodyさん
垢版 |
2006/03/31(金) 09:03:25ID:???
1.カプセル化
2.継承
3.ポリモフィズム

ならJavaのほうが初めからそういうふうに設計された言語だけあって有利じゃないの?
PHPのクラスにそういう利点て見出せないな。
0165nobodyさん
垢版 |
2006/03/31(金) 09:23:18ID:???
>>158
本当だ…
ちゃんと親クラスの関数にアクセスできる。
てっきりインスタンス時点で合成されるのかと思ってた。
0166nobodyさん
垢版 |
2006/03/31(金) 09:31:23ID:???
PHPはもともと関数志向?的な作りだから、
OOPに最適化されているとは言いがたいんだけど、
それでもクラスは使った方が便利だよ。
0167nobodyさん
垢版 |
2006/03/31(金) 09:43:30ID:???
それじゃなぜPHPを使うの?
0168nobodyさん
垢版 |
2006/03/31(金) 09:49:02ID:???
総合的に見て、実用性に秀でているから。
0169nobodyさん
垢版 |
2006/03/31(金) 11:27:34ID:???
>>164
みんなのためだなんて嘘書かないの。
ぼく分からないから教えてって言え。
0170nobodyさん
垢版 |
2006/03/31(金) 11:55:57ID:???
>>169
ぼく分からないから教えて

これでいいか?さあ早く教えろ。
0171nobodyさん
垢版 |
2006/03/31(金) 14:59:28ID:???
カプセル化 【encapsulation】
読み方 : カプセルか
分野 : プログラミング > オブジェクト指向

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


で、PHPで実用的なカプセル化ってどんなのよ?
0172nobodyさん
垢版 |
2006/03/31(金) 15:56:15ID:???
>>171
PHP(4)ではカプセル化は無理。
だから、コメント上で、
どの情報にはアクセスできてどの情報はアクセスを禁止するかを明言する必要がある。

だからPHP(4)に関して言えば、OOPによるカプセル化の利点はない。
0173nobodyさん
垢版 |
2006/03/31(金) 17:08:32ID:???
Singleton前提のクラスは
インスタンス化する必要ないってことでOK?
でもコンストラクタでの初期設定ができないか…
0175174
垢版 |
2006/03/31(金) 17:44:05ID:???
>>173
例えば >>174 のソースの中にある
euc_jp_reader クラスや shift_jis_reader クラスなんかは Singleton 前提のクラスですが、
char_iterator クラスのコンストラクタの引数となるため、インスタンス化してやる必要があります。

Singleton 前提のクラスを敢えてインスタンス化する利点の一つは、
ポリモルフィズムが応用できるってことかな。
0176nobodyさん
垢版 |
2006/03/31(金) 18:30:26ID:???
>>175
なるほど
○他の関数の引数に出来る
○その結果クラス名を指定しないメソッド呼び出しも可能になる
(ポリモーフィズム)
ってことだね
0177nobodyさん
垢版 |
2006/03/31(金) 18:35:59ID:???
>>174
2つ質問がある。
・そのスクリプトの中で、Webサイトを構築する上で有用な情報はどこにあるの?
・そのスクリプトの中で、JavaやRubyに対するPHPの優位性はどこにあるの?
0178174
垢版 |
2006/03/31(金) 19:14:39ID:???
・そのスクリプトの中で、Webサイトを構築する上で有用な情報はどこにあるの? 

ごめん。意味を正しく受け取ることが出来なかったんだけど、要は
「それを使って何か実際に役に立つものが作れるのか?」
ってことで良いですか?
これは自作の XML 解析モジュールに応用してます。
レンタルサーバーみたいに、外部モジュールを自由に導入できない
(すなわち libxml モジュールなどが使えない)環境のために作りました。

・そのスクリプトの中で、JavaやRubyに対するPHPの優位性はどこにあるの?

知りません。もしかしたら Java や Ruby のほうが優れているんじゃないんですか?
別に PHP が Java や Ruby より優れてなきゃいけない理由なんてないし。
0179nobodyさん
垢版 |
2006/03/31(金) 19:54:05ID:???
1つ目の質問についてだけど、いちおうWebProg板だしWebプログラミングでオブジェクト指向っていうのがテーマなスレだから、あんまりズレないようにしないとね。
XMLの解析に使ってる点はいいんじゃない。お疲れさん。
2つ目は他の言語でなくなぜPHPなのかって話題が出てたから聞いてみただけ。
PHPしか知らないってのも理由の1つとしてはいいけど、馬鹿にされるからあまり言わないほうがいいかもね。
0181nobodyさん
垢版 |
2006/03/31(金) 22:24:05ID:???
>>171の続き

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

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


で、PHPで実用的な継承ってどんなのよ?
0184nobodyさん
垢版 |
2006/03/31(金) 23:22:53ID:???
なんだこの流れ
PHP のスレは大量にあるんだからどこでも使えよ
単に PHP をバカにしたいやつはもうこないでくれないか
本当に知らないのならもっと真摯に勉強しろ
0185nobodyさん
垢版 |
2006/03/31(金) 23:40:49ID:???
>>184
そう言い捨てて意味のあることを書かない(書けない?)人が多いんですよこのスレ。
0186nobodyさん
垢版 |
2006/03/31(金) 23:42:06ID:???
それ以前に意味のある質問したことあるんですか?
0187nobodyさん
垢版 |
2006/03/31(金) 23:55:31ID:???
その質問は意味があるんですか?
0188174
垢版 |
2006/03/32(土) 00:32:20ID:???
>>181
>>174 で晒したソースは、
PHPでの実用的な継承 (っていうか、別に普通だけど) の例でもあると個人的に思うのですが、
これだけだと伝わりませんでしたか?
0189nobodyさん
垢版 |
2006/03/32(土) 16:53:32ID:???
この流れじゃあ
「オブジェクト指向意味ワカランから本買うけど何がいい?」
なんて厨な質問できねーYO!
0190nobodyさん
垢版 |
2006/03/32(土) 17:09:54ID:???
>>174
いや、そんな自己満コード晒してもらっても
0191nobodyさん
垢版 |
2006/03/32(土) 20:29:42ID:???
>>189
ぱっと思いつくのは
憂鬱なプログラマのためのオブジェクト指向開発講座―C++による実践的ソフトウェア構築入門とか
>>188
OO分かってない奴にいきなりコードを見せても
チンプンカンプンだと思う
0193nobodyさん
垢版 |
2006/03/32(土) 21:39:06ID:???
>>128
JavaやC++のように大規模開発でも使う場面が
多い言語ではprivateは重宝するよ。
なにせprivateをうまく使うとデバッグがしやすいしバグもとりやすく
テストもしやすくソースコードの信頼性も上がる。

0194nobodyさん
垢版 |
2006/03/32(土) 21:42:32ID:???
>>137
PHP使えるレンタル鯖が多いからだろ。
Ruby使える鯖は少ないし
Rubyというだけで日本人が作った言語だから
ショボイと思われがてで不キュしていなかったと思われる。
0196nobodyさん
垢版 |
2006/03/32(土) 21:45:56ID:???
>>156
おれはよく継承を使いまくってる。
将来拡張する予定があるものは
かならず(空でもいいので)スーパークラスを作って
継承してつかっている。

継承は使い方を間違えたり勘違いしている人間が使うと
継承=拡張そのものだと
誤解してだたやみくもに継承しまくることがあるので、
継承を使いこなしたければ
デザインパターンについてよく勉強した方が良い。

0197nobodyさん
垢版 |
2006/03/32(土) 21:47:44ID:???
>>160
> ・関数がいい人は関数でやればいい
> ・クラスがいい人はクラスでやればいい
> ↑ここまではおk。それじゃ、
> ・クラスがいい人は何のためにクラス使ってるの?しかもPHPでw ←いまここ

大規模化する可能性のあるソフトをPHPで作るとき。
顧客がPHPを使えと言ってきたら
PHPを使わざるを得ない。けれどもオブジェクト指向を
使わないで開発すると一体どんなとんでもない目に
あうのか散々味わってきたので
漏れはかならずオブジェクト指向でPHPコードを書く。
0198nobodyさん
垢版 |
2006/03/32(土) 21:49:55ID:???
継承 = inheritance
拡張 = extends

なんだよな・・・・
0199nobodyさん
垢版 |
2006/03/32(土) 21:50:04ID:???
>>163
それに関してはPHPでもJavaでも同じように実現できている。
PHPで問題なのは名前空間と型安全性問題。
メソッド引数に型指定もクラスしか使えないこと。
integer型やstring型などをメソッド引数に指定できないのが
今のPHP5の難点。Javaでいえば引数の型をObjectにしているようなものだ。
Perlでも同様だが。
0200nobodyさん
垢版 |
2006/03/32(土) 21:52:35ID:???
>>171
PHP5はどうみてもJavaのパクリとしか
思えないほど十分にオブジェクト指向できるような
言語となった。問題なのは上でも述べているとおり
名前空間と型指定の曖昧さ、ほかに戻り値の型を指定できないことだね。
レスを投稿する


ニューススポーツなんでも実況