Webでオブジェクト指向プログラミング
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/12/02(金) 11:18:17ID:lnZM9OlM・OOP、MVC、デザパタなどのコンセプト的な話題
・OOにまつわる言語比較(言語批判はその言語で開発してる人に失礼にあたることが多いのでなるべく禁止でお願いします)
・保守、再利用、生産性、開発環境などの実践的な話題
・Webサーバ、DBなどの外部との親和性に関する問題
・学習、教育などの方法論
などなど。
前スレ
PHPでオブジェクト指向プログラミング
http://pc8.2ch.net/test/read.cgi/php/1113724557/
0194nobodyさん
2006/03/32(土) 21:42:32ID:???PHP使えるレンタル鯖が多いからだろ。
Ruby使える鯖は少ないし
Rubyというだけで日本人が作った言語だから
ショボイと思われがてで不キュしていなかったと思われる。
0195nobodyさん
2006/03/32(土) 21:43:46ID:???この本を読めばクラスの使い方がわかるようになるよ。
超お勧め。
Amazon.co.jp:アジャイルソフトウェア開発の奥義: 本
http://www.amazon.co.jp/exec/obidos/ASIN/4797323361/249-2469696-1854764
0196nobodyさん
2006/03/32(土) 21:45:56ID:???おれはよく継承を使いまくってる。
将来拡張する予定があるものは
かならず(空でもいいので)スーパークラスを作って
継承してつかっている。
継承は使い方を間違えたり勘違いしている人間が使うと
継承=拡張そのものだと
誤解してだたやみくもに継承しまくることがあるので、
継承を使いこなしたければ
デザインパターンについてよく勉強した方が良い。
0197nobodyさん
2006/03/32(土) 21:47:44ID:???> ・関数がいい人は関数でやればいい
> ・クラスがいい人はクラスでやればいい
> ↑ここまではおk。それじゃ、
> ・クラスがいい人は何のためにクラス使ってるの?しかもPHPでw ←いまここ
大規模化する可能性のあるソフトをPHPで作るとき。
顧客がPHPを使えと言ってきたら
PHPを使わざるを得ない。けれどもオブジェクト指向を
使わないで開発すると一体どんなとんでもない目に
あうのか散々味わってきたので
漏れはかならずオブジェクト指向でPHPコードを書く。
0198nobodyさん
2006/03/32(土) 21:49:55ID:???拡張 = extends
なんだよな・・・・
0199nobodyさん
2006/03/32(土) 21:50:04ID:???それに関してはPHPでもJavaでも同じように実現できている。
PHPで問題なのは名前空間と型安全性問題。
メソッド引数に型指定もクラスしか使えないこと。
integer型やstring型などをメソッド引数に指定できないのが
今のPHP5の難点。Javaでいえば引数の型をObjectにしているようなものだ。
Perlでも同様だが。
0200nobodyさん
2006/03/32(土) 21:52:35ID:???PHP5はどうみてもJavaのパクリとしか
思えないほど十分にオブジェクト指向できるような
言語となった。問題なのは上でも述べているとおり
名前空間と型指定の曖昧さ、ほかに戻り値の型を指定できないことだね。
0202nobodyさん
2006/03/32(土) 21:59:03ID:???そんなに汚くないコードだけど
ちょっと抵抗があるソースコードだな。
クラス名が全部小文字で
名前空間の替わりの役割を果たしているわけでもないのに
区切り文字に_(アンダースコア)つかうという
表記を未だに使っているとは・・・・。
やっまりキャメルケース(CamelCase)がわかりやすいと思うのだが。
それから一ファイルにつき一クラスにしておくのがベスト。
一つのファイルに複数のクラスを入れておくことはお勧めしない。
ファイル名とクラス名も一致させておく。名前空間が使えないので
そこだけ例外的にクラスだけ名に_(アンダースコア)を使う。
詳しくはPEARライブラリのソースコードを見てみてくれ。
それから文字コードがEUCだとは。
Unicode(UTF-8)で統一してくれれば
DBとのやりとりも楽なのだが。
0203nobodyさん
2006/03/32(土) 22:01:42ID:???悪いがあなたが書いたソースコードが実用的な例だとは
とても思えない・・・・。
あのコードがPHPで有ろうとJavaに置き換えようと実用的になるとは
とても思えない。
0205nobodyさん
2006/03/32(土) 22:05:14ID:???PHPやJavaではextendsで継承しているともいうし拡張するともいう。
しかしクラスそのものを拡張しているだけであって
それによってそれだけで簡単にソフトウェアの拡張性が高まるとは限らない。
という落とし穴に気をつけないといけない。
その辺りを素早く理解するにはデザインパターンを学ぶことをお勧めする。
この本は初心者には非常にわかりやすいので
かなりお勧め。
増補改訂版Java言語で学ぶデザインパターン入門
http://www.hyuki.com/dp/
0206nobodyさん
2006/03/32(土) 22:06:45ID:???gotoか。Javaみたいに例外処理限定や
ラベル付きbreak, continue文だけにgoto同様の機能を
限定的に持たせるだけにしてくれればいいのだが・・・・。
C#みたいにJavaのラベル付きbreakやcontinueをgotoキーワードで
実装すると言うだけのレベルだろうか?
0207nobodyさん
2006/03/32(土) 22:20:15ID:???俺は悪いコードだとは思わないが
0209nobodyさん
2006/03/32(土) 22:39:55ID:???俺的には無限再帰を可能にしてwhileとforみたいなダサいもんも排除した
関数言語にして欲しいと前から思っているんだけどそんな人いませんか。
0210nobodyさん
2006/03/32(土) 23:12:37ID:???0211nobodyさん
2006/03/32(土) 23:13:10ID:???使い道がないから。
ウェブでオブジェクト指向するなら、JavaScriptが一番使いどころが多い。
0213nobodyさん
2006/03/32(土) 23:39:13ID:???とりあえずどんなものかは
わかったけど実際にどうやって
それを有効利用できればいいか
わからない香具師に結城本はおすすめだと思う。
0214nobodyさん
2006/03/32(土) 23:40:02ID:???> ウェブでオブジェクト指向するなら、JavaScriptが一番使いどころが多い。
まてまてw それはJavaの間違いではw
0216nobodyさん
2006/03/32(土) 23:56:49ID:???0217nobodyさん
2006/04/02(日) 00:13:33ID:???publicと明示的につけないとパッケージ外部からアクセスできなくなる
ってことが名前空間がないPHPではできないから
デザインパターンの実装も中途半端になる。
0218nobodyさん
2006/04/02(日) 01:06:11ID:???そんなやつの話を持ち出されても知らない
ダメコーダに強制できないとかいう話ならご愁傷さま
としか言いようがないですな
0219nobodyさん
2006/04/02(日) 01:15:39ID:???俺も最初そのへん「これ必要か?」と思ったな
他の人(近未来の自分含む)に対しての「使われ方の説明」を
ソースの中に機能的として組み込むものだとわかって
得心した。
0220nobodyさん
2006/04/02(日) 01:57:43ID:???for () {
if () {
break foo;
}
print "bar\n";
foo:
print "baz\n";
}
こんな感じに書けるようになるもの。
0222nobodyさん
2006/04/02(日) 07:04:12ID:???型安全性ならis_arrayとかis_stringとかinstanceofでチェックすればいいだけじゃないの?
0223nobodyさん
2006/04/02(日) 07:17:49ID:???何が求められているのかを知るために
中身まで見ないといけないのはあまりよろしくないだろう。
0224nobodyさん
2006/04/02(日) 07:50:00ID:???0225nobodyさん
2006/04/02(日) 09:57:52ID:???それでもタイプヒンティングみたいにオブジェクトの型を動的にチェックしてくれるようにする構文はいいアイデアだと思った。
Javaでいう変数の静的な型指定(つーかC/C++からだけど)と構文を似せたってのも良い。
JavaScript2.0なんかもそういう方向に行ってるね。
>>199
> integer型やstring型などをメソッド引数に指定できないのが
たぶんだけど、統一性の問題があるからだと思う。
例えば引数にintを指定したメソッドがあったとして、呼び出すときにstringを渡したからってエラーにすべきではないでしょ。
その辺の仕様がうまくいかないんじゃないかな。
0227nobodyさん
2006/04/02(日) 10:24:36ID:???以前もどこかのスレで議論があったが。
それだけでは以下の問題を解決できない。
$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との違いの
に気づかない。
そして路頭に迷ったあげくにデバッグに無駄に時間をかけることになって
開発速度が衰える。
0228nobodyさん
2006/04/02(日) 10:28:07ID:???Javaみたいにラッパークラスを作ってしまえばいいかもしれんな。
final class Integer extends Number {
$private $value;
__construct($value){
if($valueがint型であれば){
$this->value = $value;
} else {
throw new NumberFormatException("整数以外入力するんじゃねえぞこのバカ野郎氏ね!");
}
}
}
0229nobodyさん
2006/04/02(日) 10:29:01ID:???あとは適度に必要な変換メソッドを追加しておくべし。
intValue()とか
0230nobodyさん
2006/04/02(日) 10:46:56ID:???お、いい方法じゃん!って一瞬思ったけど、
function method(Integer $param)
を呼び出すときmethod(10)って書けないし><
>>227
えーっと、それは型安全性の問題なの・・・?
0231nobodyさん
2006/04/02(日) 13:43:38ID:???コンポーネントに対する入力値と戻り値をちゃんとチェックするような
ユニットテストを書いとけばいいんじゃないの?
0234nobodyさん
2006/04/03(月) 11:16:30ID:???つ 「それだとAUTO-BOXINGが欲しくなるな」
満足戴けたかな?
PHPみたいな型なし言語なら、Javaみたいなプリミティブ型とそのラッパークラスのオートボクシング/アンボクシングだけでなく、もう少し汎用的な自動型変換が欲しいところだな。
function method(int $x) {}
を
method("100");
っていうふうに呼び出したならintにキャストするくらいの自動化はあってもいいと思う。
(今あるPHPのタイプヒンティングだと、型が違うとエラーっていう設計だから)
もともとPHPは変数の実行時における型が文字列か整数かを意識しなくても適宜変換してくれるように設計された言語なわけだし。
0236nobodyさん
2006/04/03(月) 14:54:33ID:???それなら、
function method($x)
{
$x = (int) $x;
}
でいいんじゃないの?
0238nobodyさん
2006/04/03(月) 15:35:04ID:???メリットって?
>>236
間違えて配列やオブジェクトを渡したときに自動的にエラーを出してくれるかもしれない。
もちろんis_intで確認してエラー出せば同じことだから絶対なければならないっていう必然性はないけど、あったら便利かとは思う。
あとタイプヒンティングでintやstringなどの基本型だけは指定できないっていう今の状況より統一感あるかと。
オートボクシングや構文糖と考え方は一緒ね。
0239nobodyさん
2006/04/03(月) 23:39:48ID:???0240nobodyさん
2006/04/03(月) 23:50:13ID:???0241nobodyさん
2006/04/04(火) 03:55:07ID:B/b940FUabstractなclass,
interfaceは、
クラス名から変えた方がいいんかな?
どうやってる?
0242nobodyさん
2006/04/04(火) 15:51:08ID:???俺はabstractもinterfaceも普通の名前にしてる。
abstractやinterfaceをある特定クラスの仕様だけ抽象したことを表現したい場合に限り「Abstract〜」とか「〜Interface」にするかも。
例外だったら「〜Exception」てつけるけど。
0243nobodyさん
2006/04/04(火) 23:58:21ID:???というか、C#やC++みたいに継承も実装もおなじ::をつかっているわけではなく
PHPはjavaのようにちゃんと継承はextends、インターフェース実装はimplements
を使うように指定されているから
名前を見ただけでインターフェースかクラスかわかるようにまでしなくてもええと思う。
IDE使えば名前指定しなくてもさらに一目でわかるし。PHPのIDEはよくわかんないけど
0245nobodyさん
2006/04/14(金) 07:15:35ID:???ビジネスロジックとドメインロジックとアプリケーションロジックは、プレゼンテーションロジックと対比的な位置づけですが、基本的に同じものですか?
0246nobodyさん
2006/04/14(金) 10:33:43ID:???使用する分析・設計手法によって、使われる用語とその定義は違ってきます。
こういうインフォーマルな場では、それぞれが別の立場・定義で勝手に用語を使う
ことが多く、基本的な認識がすれ違ったまま不毛なレスが飛び交うのが常です。
まずは専門書で系統立った知識を得てから、自分なりの経験と知見を積んでいけば
その類のどーでもいい疑問は解決すると思われます。
0247nobodyさん
2006/04/22(土) 05:13:55ID:cnsSSisF0249nobodyさん
2006/05/28(日) 01:10:04ID:???どんなクラスのプロパティを作るかがわかれば
自ずとそれに見合った名前がわかると思うんだが。
どうしても名前がわからないときは>>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;
}
を定義するだけのものとか。
0250nobodyさん
2006/05/28(日) 09:18:03ID:???0251nobodyさん
2006/11/04(土) 00:59:33ID:1MW2WScy俺オブジェクト指向ってよくわかんないのね。で、
PHPでさ、テーブルごとにクラス作ってその中で
SQL発行してるソース見て思ったんだけど。こういう
のってテーブルのJOINはどう扱ってんの?
0252nobodyさん
2006/11/04(土) 05:52:13ID:???0253nobodyさん
2006/11/04(土) 15:27:28ID:???0254nobodyさん
2006/11/04(土) 17:39:13ID:???enableXXX/disableXXX
>>251
railsのactiverecordとか調べてみればいい
テーブル同士の関係の属性を設定して取れるようになっている
でもSQLを元にデータを取得することもできるし
複雑なJOINの場合はSQL書くのが推奨
0255nobodyさん
2006/11/21(火) 13:27:36ID:???Railsで有名になったRubyでもよさそうですが、
どれを勉強しようか悩みます。
どちらも実行環境を整えるのが自分にとって一苦労な気がするので、
今まで環境が作りやすいPHPに逃げていましたが、
一向にOOPの概念がわからずじまいで、
本格的にJavaかRubyを入れてやってみようと考えています。
0256nobodyさん
2006/11/21(火) 14:58:55ID:???つ ttp://smalltalk.cincom.jp/scripts/smalltalk.dll/tutorials/index.ssp
0257nobodyさん
2006/11/23(木) 02:32:55ID:???0258nobodyさん
2006/11/23(木) 10:48:14ID:???はいはいわろすわろす。
0259nobodyさん
2006/11/23(木) 11:32:44ID:???0260nobodyさん
2006/11/23(木) 11:33:23ID:???ある意味>>257は言い得てると思うぞ。
WebアプリはWebならではの都合で、本来のオブジェクト指向には反する設計を
強制される場面も少なくない。
0261nobodyさん
2006/11/23(木) 16:55:37ID:???0262nobodyさん
2006/11/23(木) 18:29:52ID:???0264nobodyさん
2006/11/24(金) 05:31:59ID:???オブジェクト指向はあまり身につかない。
なにしろ、インスタンスの寿命が短かくて、全員が突然死するわけだから、
時間軸がそっくり抜けてるのだよ。
気にしながらライブラリを作れば、ソースの構造的な部分はある程度身につくかな、くらいだろう。
0265nobodyさん
2006/11/24(金) 09:34:29ID:???「オブジェクト指向」と思っているんじゃないかな?
今のJavaのWebはレイヤー構造や
ドメインモデル(エンティティ)とビジネスロジックを完全に分離した設計、
ステートレス・スレッドセーフ・request/sessionスコープなどが優先されて、
本来のオブジェクト指向信者から見ると、論理的にあまりきれいな設計ではない。
とは言える。
言語レベルを超えた「モデリング」(UML等は使っても良いが)を
そのまま実装にまで落とすには無理がある。
0266nobodyさん
2006/11/24(金) 22:24:39ID:???0267nobodyさん
2006/11/25(土) 16:46:42ID:???0269nobodyさん
2006/11/28(火) 00:51:55ID:???0270nobodyさん
2006/11/28(火) 01:02:02ID:???0271nobodyさん
2006/11/28(火) 07:32:06ID:???0272nobodyさん
2006/11/28(火) 11:24:02ID:???PHPでもそれなりに勉強できると思うけどな
PHP5で書かれたフレームワークやライブラリのコードを眺めてみたら
0273nobodyさん
2006/11/28(火) 11:34:28ID:???PHPによるデザインパターン入門
http://www.cbook24.com/bm_detail.asp?sku=4798015164
0274nobodyさん
2006/11/29(水) 09:38:30ID:???どうなるか人柱になるわw
著者でググったらブログが一番上にヒットした
0275nobodyさん
2006/11/29(水) 10:49:08ID:???レビュー期待www
0276nobodyさん
2006/11/29(水) 16:42:27ID:???その言葉を信じて眺めてるんだが、
なんかごちゃごちゃしてて返ってわかりづらい・・・
コメント英語で何書いてるかわからないし。
やっぱ俺みたいな凡人は丁寧に解説してるサイトに限るな。
0277nobodyさん
2006/11/29(水) 16:50:30ID:???C++, Java, PHP は後者。前者は Smalltalk, Objective-C, io とか。
0278nobodyさん
2006/11/29(水) 17:04:29ID:???簡単なライブラリから眺めていけばいいよPEARのDBとか
OOPを一番手っ取り早く理解する方法は
OOで適当な分野のライブラリを自分でコード書いてみる事
当然よく分からないうちはコードは汚い
なのでPEARで同じような分野のライブラリコードを眺めて
どういう構造なのかを調べてみながら自分のコードを書き直す
それの繰り返しで把握していくもんだと思う
いきなりデザパタの勉強とかやってもあんまり意味がない
OOPを理解していく上でどういう局面で
どういうパターンを使ったら良いという事がわからないから
パターンってのは結局ノウハウの事だし
ノウハウってのは必要に応じて生まれて出来上がっていくもんだから
ノウハウ自体を先に説明されてもピンとこないはず
英語は勉強するしかないがまめに単語の意味を引くようにしておけば
文法を正確に理解してなくてもだいたい把握できるようになるはず
ネットならすぐに調べられるんだからそのコストは無駄にはならない
コードは万国共通だ
ごちゃごちゃしてても所詮はPHPのコード、Cやアセンブリじゃない
ゆっくり読んでいけばわかる
小さなライブラリでもよくできてるライブラリはたくさんある
その区別がつくようになっていけば
自ずといいコードも書けるようになるだろう
0279nobodyさん
2006/11/30(木) 00:04:08ID:???「どのような概念か」と「どう使うのか」
を分けないで話すとひどいことになる、
ということだな。
0280nobodyさん
2006/12/02(土) 14:06:00ID:???PEARってOOPで書かれてるの?
クラスからインスタンスをnewして使うってのが多いですね。
>>279
って>>273の本の説明の仕方がごっちゃでよくないってことなんですか?
0281280
2006/12/03(日) 01:33:46ID:???サンプルコードが載っていて分かりやすかった。
UMLの説明はさすがに他書で勉強しないと、このページ数じゃフォローできんね。
(ないよりましだけど…)
デザインパターンが活用できるようになれば、OOPが楽しくなるだろうなー☆\(^o^)/
0282274
2006/12/03(日) 18:41:26ID:???眠くてまだ読んでない
ちょっと開いたけど
0283nobodyさん
2006/12/10(日) 19:06:09ID:???サーバサイドプログラミングでのOOかよ
期待して損した・・・
0285nobodyさん
2006/12/18(月) 23:57:03ID:VHWnyE8e0286nobodyさん
2006/12/19(火) 09:58:57ID:???Thanks!!!
http://ja.wikipedia.org/wiki/WebObjects
http://www.apple.com/jp/webobjects/
0287274
2007/01/11(木) 15:28:53ID:???そこらへんは著者さんのブログやサイトを参考に補完することにしようorz
0289nobodyさん
2007/01/21(日) 01:00:05ID:0bZ76xtYPHP5とJavaのメソッドオーバーロードって全然別物なの?
0290nobodyさん
2007/01/21(日) 01:03:49ID:iXs223c10291nobodyさん
2007/01/21(日) 01:20:02ID:dNBfq9SO組み方は理解できるよ。短時間で
■ このスレッドは過去ログ倉庫に格納されています