- 1 名前:1 ◆SWtzLesEmM mailto:age [2007/02/23(金) 13:35:52 ID:???]
- PHPを使ってプログラミングするとき、
プロシージャ指向(手続き型、構造化プログラミング)でもできますが、 オブジェクト指向を使った場合の恩恵を享受するために、 PHPでオブジェクト指向プログラミングの勉強をしてみましょう。 <目的> PHP5でオブジェクト指向プログラミングを行なうための知識を習得する。 (PHP4のOOPもOK、このスレが1000に行く前にPHP6が出たらPHP6のOOPもOK) <方向性> ・このスレは、プログラミング初心者、PHP初心者の勉強の場として利用することを前提にします。 ・PHPのOOPの話題に限定します。 (Ruby、Python、Javaなど他言語のOOPについては、その言語のスレッドでお願いします。) ・PHPのOOP学習に役立つ本、WEBサイトの紹介をお願いします。 <その他> ・略記は、「OO」=「オブジェクト指向」、「OOP」=「オブジェクト指向プログラミング」でお願いします。 ・質問をする人はなるべくトリップを付けましょう。 ・荒らし、煽り、叩き、気違いは無視・無干渉でお願いします。 このスレで、今日から貴方もOOP!!!\(^o^)/
- 238 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/03(日) 14:47:56 ID:???]
- ソースを読んでいて気になった点がありますので、質問させていただきます。
includeの構成についてです。まず、各ファイルに書かれているincludeの部分をまとめます。 [index.php] include("./cfcontrol.php"); [cfcontrol.php] include("./cfview.php"); include("./cfmodel.php"); include("./config.php"); [config.php] // 実際の処理を行うスクリプトをインクルード include("./index_view.php"); include("./output_view.php"); include("./data_model.php"); これは、MVCフレームワークは、以下の3つのファイルであり、 [cfcontrol.php][cfmodel.php][cfview.php] それを拡張する形で、残りの6つのファイルを付け加えた形 なので、このようなincludeの構成ということでよろしいのでしょうか。
- 239 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/03(日) 14:50:55 ID:???]
- includeをばらばらとさせるよりも、以下のように整理したほうが
となんとなく思ったりもしたのです。 [index.php] include("./config.php"); [config.php] include("./cfcontrol.php"); include("./cfview.php"); include("./cfmodel.php"); include("./index_view.php"); include("./output_view.php"); include("./data_model.php");
- 240 名前:nobodyさん mailto:sage [2008/02/03(日) 15:27:26 ID:???]
- MVC?な俺にはここが一番わかりやすかった
実例コードが載ってるのがいい PHPでMVC第1回:前編 ttp://www.stackasterisk.jp/tech/php/phpMvc01_01.jsp
- 241 名前:nobodyさん mailto:sage [2008/02/03(日) 15:52:25 ID:???]
- javaのサイト見ろよ
- 242 名前:nobodyさん mailto:sage [2008/02/03(日) 16:56:56 ID:???]
- やけに伸びるな
- 243 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/03(日) 19:47:22 ID:???]
- ソースコードをちょっとだけ改変したものを作ってみた。
メモとかを残していく都合もあると思ったから、HP解説してみた。 ttp://www.geocities.jp/narutobakijp2/ 本当は、>>1さんがソースの管理とかもしてくれたりしたら、うれしいw
- 244 名前:nobodyさん mailto:sage [2008/02/04(月) 01:44:33 ID:???]
-
いちいちzipを解凍する気にならない
- 245 名前:nobodyさん mailto:sage [2008/02/04(月) 09:02:58 ID:???]
- >>243
CFViewクラスに具体的な実装をしちゃダメなんだよ。 そもそもHTMLのフォーム処理とかは、あとでPEARとか使えばいい。 サブクラスをうまく呼び出す仕組みだけを実装していくんだ。
- 246 名前:nobodyさん mailto:sage [2008/02/04(月) 14:12:44 ID:???]
- >>244
> サブクラスをうまく呼び出す仕組みだけを実装していくんだ。 kwsk
- 247 名前:nobodyさん mailto:sage [2008/02/04(月) 23:36:13 ID:???]
- >>246
構造化プログラミングはルーチンを呼ぶ方向で実装すると思うけど OOPではルーチンに呼ばれる方向で実装して行く感じだよ。 大枠の骨組みだけを抽象クラスで作成して、処理は具象クラスで行うんだ。 インターフェイスさえ同じならあとで個別にパーツを交換出来たりするからね。 だったら基底クラスのメソッドなんて数個で十分じゃないかと思うんだ。 やたら複雑でよくばりな機能のクラスなんて、再利用の価値がないからね。
- 248 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/05(火) 01:28:01 ID:???]
- >>247
レスありがとうございます。 > 構造化プログラミングはルーチンを呼ぶ方向で実装すると思うけど > OOPではルーチンに呼ばれる方向で実装して行く感じだよ。 私は、継承を活かした設計をした事が無かったので、ちょっと方向性を 誤ってしまったようですね。 Viewは、表示をつかさどるのだから、html表示を請け負うのでは、と 思っていたのですが、それよりも抽象的な枠組みを定義するという ことですね。 となると、html表示は(PEARを使わないのであれば、)htmlタグの 記述を行うCF_HTMLクラスを作り、Viewの具象クラス内で インスタンスを生成ということですよね?
- 249 名前:nobodyさん mailto:sage [2008/02/05(火) 08:55:19 ID:???]
- >>248
HTML処理のヘルパクラス作成はあまりOOPの勉強にならないとも思うんだ。 もう既に頭の中で実装出来ているだろうし、引数を関数で処理するだけでしょ? それよりも例えばPEARのHTML_QuickFormやテンプレートレンダラのSmartyを Viewと連携させる仕組みとかを考えたりした方がよっぽど面白いよ。 すべてをフルスクラッチするプログラミングの方向性は必ずしも得策じゃないよ 既存のライブラリやコンポーネントを上手く利用するのもOOPの要素なんだよ。
- 250 名前:nobodyさん mailto:sage [2008/02/05(火) 11:06:34 ID:???]
- OOPで継承を用いた設計について調べてみた。(OOP理論の入門ではなく、
継承を用いた設計などが入った解説) この連載は良いかもしれない。 オブジェクト指向プログラミング超入門 .NETでオブジェクト指向プログラミングを始めよう www.atmarkit.co.jp/fdotnet/basics/oop_index/index.html 特に第6回は、今まで出てきていた話題だと思う。 Objectクラスで仮想メソッドToStringをもち、それから派生したクラスは、 オーバーロードをする仕組みを図説していて分かりやすい。 第6回 階層の頂点に立つクラス www.atmarkit.co.jp/fdotnet/basics/oop06/oop06_01.html
- 251 名前:nobodyさん mailto:sage [2008/02/05(火) 11:52:25 ID:???]
- >>250
PHPのプログラマにも非常に参考になると思いますよ。 .NETの世界はクラスベースなので初めからOOPの思考で実装します。 関数が作れないので構造化思考のVB6プログラマとか、クラスをnewせずに 引数を大量に渡すスタティックメソッドを呼んだりしてしまいます・・・ PHPはC言語での関数モジュールを呼び出す実装スタイルに近いので やはりクラスを使って構造化プログラミングをしちゃいがちですね。 普及しているPHP4がOOP対応不十分なのと、開発環境が貧弱であることも PHPでOOPがなかなか利用されない原因になってたりしますよね。 プロテクテッドメソッドの概念とかIDEがないと、なんでそうするのか なかなか理解出来ないとも思いますしね。
- 252 名前:nobodyさん mailto:sage [2008/02/05(火) 11:56:50 ID:???]
- いくらかのデータを登録し、その内容を検索するWebシステムで使用する
クラス構成で、Viewに絞った構成を考えてみた。 [View] ├[認証] ├[個人情報入力] ├[メニュー] ├[検索指定] ├[検索結果] 別の案として、[View]から[Input View]と[Output View]の 二つを継承し、さらに以下のような継承も浮かんだけれど、 継承して分ける必要性は無さそうなので、上記の方が良いように思う。 [Input View] ├[認証] ├[個人情報入力] [Output View] ├[メニュー] ├[検索指定] ├[検索結果]
- 253 名前:nobodyさん mailto:sage [2008/02/05(火) 12:16:06 ID:???]
- >>252
[View] ├[LoginView] ├[InsertView] ├[MenuView] ├[SelectView] ├[ResultView] こんな感じ?
- 254 名前:nobodyさん mailto:sage [2008/02/05(火) 13:28:44 ID:???]
- Debug用出力のメソッドをView(基底クラス)に追加するといいだろうね。
各画面([LoginView] [InsertView] [MenuView] ・・・)で エラー確認用のメソッドをオーバーロードする形で。 開発中はPOSTで受け取ったデータとかを画面上部に表示しながら動作確認する っていうのは、よくやるからね。 Objectクラスを継承する形にするのは、このスレでは共通したメソッドの 実装という理由だ。という話だったけど、リファレンス関係の処理で 便利だという話がサイトに載っているようだね。 このあたりの考え方も活かすと良いかもしれない。 ただ、PHPのOOPだとうまく実装出来ないかもしれないが。 >>207-209 >>250
- 255 名前:nobodyさん mailto:sage [2008/02/05(火) 13:44:31 ID:???]
- Modelクラスも以下のメソッドを追加するという感じで設計すると良いのかな。
Select // データ取り出し Delete // 削除 Insert // 新規追加 Update // 既存データの更新 >>228に載ってる既存のクラスには Execute があるけれど、 これも残しておくべきかな?
- 256 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/05(火) 19:03:57 ID:???]
- 案がいくつか出てきたので、前回の駄目なソースを破棄して
またソースコードをリニューアルしようかと思ったが、 いざやり始めてみると、データベースを管理する基底クラスの 設計を具体的にどうするかをきめないといけなくなり、それを どうするかで迷っている。。。 概ね以下のような感じにしたいと思ってるんだけどね。 DB格納の基底クラス:CFDB テキストファイルに保存するクラス:Text_DB extend CFDB PostgreSQLに保存するクラス:PostgreSQL_DB extend CFDB MySQLに保存するクラス:MySQL_DB extend CFDB で、この3つのいずれかのインスタンスを Model のメンバに持たせる。 現在のコード(CFModelのメンバ) var $file_name; // 読み込むファイル名 更新案のコード var $m_db; // データベースを格納。
- 257 名前:nobodyさん mailto:sage [2008/02/05(火) 20:33:23 ID:???]
- >>255
普通は機能をメソッドに振り分けると思うけど コントローラのメソッド内で以下の様に 操作出来たら面白くない? // モデルにフォーム値を渡してデータ書き込み $insert = $this->models['InsertModel']; $insert->setItem('name', $_POST['name']); $insert->setItem('title', $_POST['title']); $insert->setItem('body', $_POST['body']); $insert->execute(); // ビュー表示用にデータをロードする $select = $this->models['SelectModel']; $data = $select->execute(); >>256 自分なりに試行錯誤で機能を実装してみるのも楽しいかもね。 誰か>>252のアプリ作成に必要な要求仕様作ってよ。
- 258 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/05(火) 23:02:08 ID:???]
- >>257
要求仕様案 私は眼鏡屋(○○支店の店長)をやっている。 顧客の情報(名前、住所、性別、生年月日、・・・)を管理したい。 ・眼鏡を購入した顧客の情報を登録しておき、ある一定期間経つと 新しい眼鏡を購入する案内のDMを発送したい。 →条件検索をしたい。 ・登録した情報を検索し、どんなお客様かをすぐに確認出来るようにする。 →例えば、苗字を聞いて、詳細が分かるようにする。 ・眼鏡の定期的なメンテナンスで、訪問してきたら、その対応履歴を 登録しておきたい。 →眼鏡のクリーニング、シリコンパッド(鼻にあてるやつ)の交換など ・定期的なメンテナンスは無料であるので、全く店に来ない客には、 その無料案内のDMを発送したい。 →今回は、複数の店舗にまたがった処理はいらない。 ・他の社員に勝手に情報を触られないように、認証を通すようにする。 眼鏡の在庫管理は、このシステムとは別。 これは、プログラムの規模が大きくなりすぎるようであれば、 もちろん内容を変えてもいいです。「顧客の情報を登録し、 それを検索する」という流れだと、勉強用サンプルとして非常に 良いのでは、と思いました。
- 259 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/05(火) 23:21:24 ID:???]
- [データの入力例]
氏名:茂名 フリガナ:モナー 性別:男性 生年月日:H1/3/3 住所:東京都・・・ コメント:ふちなしタイプを希望している。 眼鏡購入日:2007/1/5 眼鏡の型番:2ch [2007/1/5に購入した2ch]のメンテナンス履歴 2007/2/5:クリーニング 2007/3/15:ネジの交換 2007/5/1:クリーニング、曲がったフレームの修正 顧客のデータ1件に、眼鏡の購入日がつながり、さらに、メンテナンス履歴が つながる構成になるけれど、今回は勉強用なので、「顧客のデータ1件=眼鏡の購入日1件」 としてもいいかもね。 再度購入したら、顧客の個人情報を0から入力しなおすみたいな。
- 260 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/06(水) 01:36:05 ID:???]
- View の Debug メソッドの仕様もどうするかで迷っている。
Execute($param)したあと、Debugとか、もしくは、 Debugの中でExecute($param)を呼び出す処理だと、 <html>タグのそとに確認データが出力されてしまう。 Debug モードを on にすれば、<body>タグの上部に テーブルで区切ってデータが表示されるとかかな。 だったら、メンバにDebugモードを追加かな。 という感じに考えてる。 みんなどう思う?
- 261 名前:nobodyさん mailto:sage [2008/02/06(水) 09:30:01 ID:???]
- >>258
ちょっとしたシステムじゃん・・ (´・ω・) それこそ既存のフレームワーク使用する案件だよ。 >>260 ディレクティブ付けたechoやvar_dump埋め込みで十分だと思うよ。 むしろその機能を実装するより、デバッガ環境構築した方がいい・・・ OOPに対する基本的概念への理解があまりにも無さ過ぎると思うんだ。 >>255にしても、Executeメソッドに呼ばれる仕組み作ってんのに、 なんで新しいメソッド実装して直接呼びたがるんだろう? あれほどインタフェイスだけで実装するんだと(ry それよりコントローラの実装仕様どうするの?
- 262 名前:1 ◆SWtzLesEmM mailto:sage [2008/02/06(水) 10:44:17 ID:???]
- >>243
>ttp://www.geocities.jp/narutobakijp2/ ↓動作サンプルを設置しました。 ssurl.net/so2o ↓コードに関するコメントのまとめ(>>184-226辺り) ssurl.net/h8bu
- 263 名前:nobodyさん mailto:sage [2008/02/06(水) 11:45:05 ID:???]
- >>262
非常に乙です。m(_ _)m >>226だけど >>1さんにここまでやって貰っちゃって申し訳ないし これぞOOPってサンプルを必死に実装してアップするんでしばしお待ちを・・
- 264 名前:nobodyさん mailto:sage [2008/02/06(水) 13:18:03 ID:???]
- >>263
はやくアップしろよなw 俺がそれ見て勉強して、いつかエロイ人になったら お前を雇ってやるよ! 感謝しろ
- 265 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/06(水) 16:04:09 ID:???]
- >>262
動作サンプルまでつけていただいて、ありがとうございます。 過去ログも、そのままコピペするんじゃなくて、色をつけたり 分類したりすると非常に分かり易いですね。 ShiftJISだったりとか、スペース2個というのは標準じゃないとかは 気づいてたのですが、そこまで治していただいて申し訳ないです。
- 266 名前:nobodyさん mailto:sage [2008/02/06(水) 16:34:44 ID:???]
- MVCって難しいね。
- 267 名前:nobodyさん mailto:sage [2008/02/06(水) 17:31:55 ID:???]
- >>266
別にわかんなくったって、やってけるから大丈夫。 無理に背伸びする必要は無い。
- 268 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/06(水) 20:19:07 ID:???]
- フレームワークの解説に関するサイトを見つけました。
ここで概要をつかんだ後、実際に触れてみるといいかもしれない。 ASP.NET vs. Struts フレームワーク徹底比較[前編] www.atmarkit.co.jp/fdotnet/special/aspstruts01/aspstruts01_04.html この文章書いてる人、ネットワーク関連の書籍でよく見かけるよね。
- 269 名前:nobodyさん mailto:sage [2008/02/07(木) 10:03:39 ID:???]
- >>261
> OOPに対する基本的概念への理解があまりにも無さ過ぎると思うんだ。 > >>255にしても、Executeメソッドに呼ばれる仕組み作ってんのに、 > なんで新しいメソッド実装して直接呼びたがるんだろう? > あれほどインタフェイスだけで実装するんだと(ry ちいたんのフレームワークは、Modelにinsertやdelを持ってるからそれを 参考に設計してみたんだけど。 ttp://php.cheetan.net/manual/model.php 俺はこれから勉強していくところなので理解がないのは認めるが、 このあたりはどういう見解なのかを教えて欲しい。 今回作るMVCフレームワークは、学習用なのでもっと簡潔な レベルなのを想定しているとか、ちいたん作っている人がOOPに 関する理解が無いだけだとか。
- 270 名前:nobodyさん mailto:sage [2008/02/07(木) 10:24:36 ID:???]
- >>269
フレームワーク実装に正解も不正解も無いと思うけどね・・ 例えば ・クラスを使った構造化的メソッド呼び出し $model->insert(); $model->del(); よりも ・ポリモーフィズム $insert->execute(); $del->execute(); のほうがインターフェイスが規定されていて 簡潔で安全だと説明したかったんだよ。 insertメソッドやdelメソッドを呼ぶ文脈が規定されていたらどう? insertオブジェクトのexecuteメソッドならオブジェクトが 文脈をコントロール出来るでしょ? どうかな? 学習用だからこそ『呼ばれる仕組み』で実装しようとしているんだよ。
- 271 名前:nobodyさん mailto:sage [2008/02/07(木) 10:55:50 ID:???]
- >>270
レスサンクス。となると、 class CInsert extend CView、class CDel extend CView、・・・ みたいな設計にするということ? ちょっと大雑把になってるけど、CInsertはこんな感じに実装するとか。 (テーブルのフィールドは、a,b,cという場合。) class CInsert extend CView{ var $field_a; var $field_b; var $field_c; function setItem($field, $data){ if($field == "a"){ $field_a = $data; } if($field == "b"){ $field_b = $data; } if($field == "c"){ $field_c = $data; } } function _OnExecute($param){ $fp = fopen($file_name,"a"); $write_line = $field_a . "," . $field_b . "," . $field_c; fwrite($fp,$write_line); fclose($fp); } }
- 272 名前:nobodyさん mailto:sage [2008/02/07(木) 11:32:07 ID:???]
- じゃ、用件仕様はこんな感じで良いのか?
[認証] →・ID、パスワードにて認証 ・認証成功で[メニュー]へ移動 [メニュー] →・(新規)[個人情報入力]、[検索指定]画面へ移動するボタンがある [個人情報入力] →・名前、性別 を登録 [検索指定] →・氏名のキーワードを含む検索、性別指定が出来る。 [検索結果] →・条件に一致するデータを一覧で出す。 ・個人情報を修正したい場合は、ここから[個人情報入力]へ移動する。 ・個人情報を削除したい場合は、ここで削除ボタンを押す。
- 273 名前:nobodyさん mailto:sage [2008/02/07(木) 12:35:22 ID:???]
- >>271今こんな感じ。
[DataModel.php] <?php /** * データModel抽象クラスです。 */ class DataModel extends Model { # @access private var $_items; # @access public var $file_name; # @access public function setItem($key, $value) { $this->_items[$key] = $value; } # @access public function getItem($key) { return $this->_items[$key]; } } ?>
- 274 名前:nobodyさん mailto:sage [2008/02/07(木) 12:36:19 ID:???]
- [InsertModel.php]
<?php /** * データ追加Model抽象クラスです。 */ class InsertModel extends DataModel { # @access sealed function & _onExecute(&$param) { return $this->_OnInsert(&$param); } # @access protected function & _onInsert(&$param) { trigger_error('オーバーライドして下さい。', E_USER_ERROR); } }
- 275 名前:nobodyさん mailto:sage [2008/02/07(木) 12:37:26 ID:???]
- [SampleInsertModel.php]
<?php /** * データ追加 サンプルクラスです。 */ class SampleInsertModel extends InsertModel { # @access protected function & _onInsert(&$param) { // ここで初めてユーザ定義のメソッドを実行する。 // FWからここが呼ばれるまで待ってるのがポイント! // INSERTイベントの処理ハンドラに記述するともとれるね。 return $this->_saveData(); } /** * ユーザ定義のプライベートメソッド */ # @access private function _saveData() { // リクエストは以下のインターフェイスで取得。 $value = $this->getItem('hoge_data'); // ここで初めてHogeHogeする。 // DBオブジェクト呼ぶなりご自由に! return $data; } } ?>
- 276 名前:nobodyさん mailto:sage [2008/02/07(木) 13:59:04 ID:???]
- 細かい指摘になるけれど、継承関係の勉強中なので質問で書き込みします。
[InsertModel.php] class InsertModel extends DataModel function & _onExecute(&$param) のところは、 return $this->_OnInsert(&$param); となっているけれど、 return $this->_onInsert(&$param); が正しいという解釈で良いのですよね?
- 277 名前:nobodyさん mailto:sage [2008/02/07(木) 14:16:55 ID:???]
- >>273-275
ソースのサンプルサンクス。 イメージしてたよりも継承が多いですね。 全体ソースコードの可読性よりも、クラス単位での 再利用性を考えた場合は、このような構成になる のでしょうね。早く慣れないといけません。
- 278 名前:nobodyさん mailto:sage [2008/02/07(木) 15:36:22 ID:???]
- まだ中身が出来ていない状況なので、修正の必要はあるだろうけど、
こんな感じでドキュメントもまとめていくと、分かりやすくなるだろうね。 ■SampleInsertModelクラス[SampleInsertModel.php] Model - DataModel - InsertModel - SampleInsertModel ◎概要 DBへのデータの記録、読み取りを行うクラス。 ◎メンバ一覧 [publicコンストラクタ] SampleInsertModel() [publicメソッド] setItem($key, $value):setter。フィールド名を指定し、データを登録する。 getItem($key):getter。フィールド名を指定し、データを取得する。 Execute($param):setItemでセットしたデータをDBに記録する。 ◎使用例 $model = new SampleInsertModel(); // クラスのインスタンスを生成する。 $model->setItem('Name', 'Tarou'); // [Name]フィールドに[Tarou]を登録する。 $model->setItem('Sex', 'man'); // [Name]フィールドに[man]を登録する。 $model->Execute(); // setItemで登録したデータをDBに書き込む。
- 279 名前:nobodyさん mailto:sage [2008/02/07(木) 23:22:51 ID:???]
- >>263 ひとまず出来ました・・疲れました・説明は後でアップしようと思います・・
ttp://proxy.f3.ymdb.yahoofs.jp/bc/4525b767_dfac/bc/452a/PHP%a5%d5%a5%ec%a1%bc%a5%e0%a5%ef%a1%bc%a5%af.zip?BCUjxqHB4brtVvJJ
- 280 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/07(木) 23:27:16 ID:???]
- >>279
乙です。じっくりソースを読んでみます。
- 281 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/08(金) 08:04:01 ID:???]
- せっかくプログラムを作っていただいたのだから、みんなでその説明文章をまとめるといいかもね。
例えば、こんな感じでhtmlで書いておいて、ファイル名をクリックすると、その詳細の説明のページに飛ぶとか。 [abstract] [controls] 空 [models] DataModel.php、DeleteModel.php、InsertModel.php、SelectModel.php、UpdateModel.php [views] HtmlQuickFormSmartyView.php、RenderView.php [controls] MainControl.php、SkeletonControl.php [data] 空 [framework] Base.php、Control.php、Model.php、View.php [lib] Request.php [models] SampleInsertModel.php、SampleSelectModel.php、SkeletonSelectModel.php [smarty] [cashe] 空 [templates] index_tmple.html、output_tmple.html [templates_c] 空 [views] HtmlQuickFormSmartyIndexView.php、HtmlQuickFormSmartyOutputView.php IndexView.php、OutputView.php、SkeletonView.php app.log、appconf.php、csv.txt、hoge.txt、index.php、Main.php、userconf.php
- 282 名前:nobodyさん mailto:sage [2008/02/08(金) 08:10:57 ID:???]
- >>281
>>279ですがphpDocumentorで今作っているのでちょっと待っててね。
- 283 名前:nobodyさん mailto:sage [2008/02/08(金) 08:52:15 ID:???]
- phpDocumentorにソース読み込ませて吐かせただけです。
ttp://proxy.f3.ymdb.yahoofs.jp/bc/4525b767_dfac/bc/452a/PHP_FW_DOC_01.zip?BCKv5qHBVNsncE.h フォルダ内のindex.htmlです、荒いですがご容赦を。 とりあえずトライアルなんでまだリファクタ出来そうだけど・・ [コントローラの処理] _form_onLoad _buttonHoge_onClick [モデルの処理] _onSelect _onInsert [ビューの処理] _onRender 上記のイベントハンドラにユーザ処理を記述して フレームワークに呼んでもらう構造になってます。 >>216を実装したつもりです・・・ 有名なハリウッドの法則です。 [カプセル化]は良いとして、やはり[継承]と[ポリモーフィズム]を うまく使うのは最初難しいかもしれない・・ これらの実装もデザパタとしてライブラリ化されたものに過ぎないけどね。
- 284 名前:nobodyさん mailto:sage [2008/02/08(金) 09:26:17 ID:???]
- ファイルが見れん・・・
- 285 名前:nobodyさん mailto:sage [2008/02/08(金) 11:03:39 ID:???]
- OOP FW ソース
ttp://proxy.f3.ymdb.yahoofs.jp/bc/4525b767_dfac/bc/452a/OOP_FW_02.zip?BCE07qHBz_6Z6R84 OOP FW ドキュメント ttp://proxy.f3.ymdb.yahoofs.jp/bc/4525b767_dfac/bc/452a/OOP_FW_DOC_02.zip?BCE07qHB2C3Z36pC すいません再アップしました、ドキュメントにControlが反映されてませんでした。
- 286 名前:nobodyさん mailto:sage [2008/02/08(金) 11:20:06 ID:???]
- サンクス
- 287 名前:nobodyさん mailto:sage [2008/02/08(金) 11:51:38 ID:???]
- 全体構成の把握はまだ出来てないけれど、只今、ソース解析中・・・
いちゃもんつけるつもりじゃないけれど、気になった点を2つ。 Control.phpのPOSTされたSubmitボタン名取得のところは クラス化されてないのはどうしてなのでしょうか? さらに非常にクラスが多くなって面倒になるから? class Control extends Base var \$_view_calss; このメンバはあえてclassにしてない理由はあるのでしょうか。
- 288 名前:nobodyさん mailto:sage [2008/02/08(金) 12:39:56 ID:???]
- >>287
POSTされたサブミットボタン名取得部分は説明の通りです・・ 今その部分をC#でのデリゲートで実装しようと思ってます。 Viewクラスexecuteのところもこのままでは$eパラメータが コントローラから任意に渡せないので検討中です。 オブジェクトにexecute以外のパブリックメソッドを 実装しないのが目標です・・(※アクセサ以外)
- 289 名前:nobodyさん mailto:sage [2008/02/08(金) 13:12:48 ID:???]
- クラスの継承関係が結構複雑になってますね。
Documentsいただいても、追いかけていって、全体構造を把握するのが結構大変。 例えば、SampleInsertModelからその元を追っていくと、以下のような継承構造。 Base - Model - DataModel - InsertModel - SampleInsertModel 俺のメモとして、SampleInsertModelを追いかけていった様子をまとめておく。 ■Base(抽象)クラス[fw/framework/Base.php] ●パブリックメソッド & execute(&$param, $e) →アプリのログを記録する。_onExecute(&$param, $e)を実行 ●プロテクテッドメソッド _onExecute(&$param, $e) →サブクラスでオーバーライドして使用。 ■Model(抽象)クラス[fw/framework/Mode.php] ●プロパティ $src_file_name; // 読み込むファイル名 $dst_file_name; // 書き込むファイル名
- 290 名前:nobodyさん mailto:sage [2008/02/08(金) 13:15:33 ID:???]
- ■DataModel(抽象)クラス[fw/abstract/models/DataModel.php]
●フィールド $_items; // コントロール値のハッシュを保存 ●パブリックメソッド setItem($key, $value) // コントロール値を受け取り、$_itemsに代入 getItem($key) // $_itemsの値を返す。 ■InsertModel(抽象)クラス[fw/abstract/models/InsertDataModel.php] ●シールドメソッド & _onExecute(&$sender, $e) →onInsert(&$sender, $e) ●プロテクテッドメソッド & _onInsert(&$sender, $e) →オーバーライドして使用する。 ■SampleInsertModelクラス[fw/models/SampleInsertModel.php] ●プロテクテッドメソッド $ _onInsert(&$sender, $e) →ここにユーザ定義のコードを記述する。_saveData()を実行 ●プライベートメソッド _saveData() →現在未実装。
- 291 名前:nobodyさん mailto:sage [2008/02/08(金) 13:32:42 ID:???]
- こうやってみてみると、クラスを継承する際の設計思想が見えてくるな。
どの段階で実装を替えるかを考えた場合、どのクラスを置き換えれば良いかも分かる。 しかし、俺はこれまでフレームワークの構成などをじっくり読んだりしたことが無いので、 つい、ここまでクラスを継承させるメリットがあるのかなとか思ってしまう。 なんか、1つのメソッドを実装するのに、1回継承してるって感じだよね。 例えば、Model(抽象)クラスの $src_file_name を別のものにする場合、 それ以降のクラスが全部影響するかの確認が必要なわけだから、 Model(抽象)クラス以降のものをすべて一つのクラスにまとめて書いても 同じなんじゃないかと思えてしまう。 こういうのとは別な場面で、継承しているメリットがあるってことかな?
- 292 名前:nobodyさん mailto:sage [2008/02/08(金) 13:51:09 ID:???]
- ちょっと紹介しておきますね。
フレームワークを使った開発のメリット、デメリットを教えてください q.hatena.ne.jp/1188498291 特集:第1回 フレームワーク「Struts」の基礎を知る (3/8) フレームワークのメリットとデメリット www.itmedia.co.jp/enterprise/0310/06/epn03_3.html
- 293 名前:nobodyさん mailto:sage [2008/02/08(金) 15:31:59 ID:???]
- Control の & _onExecute(&\$param, \$e) で
\$this->_view_calss = \$view_calss; というコードがあるけれど、右辺の \$view_calss って、 何処でも定義されてないですよね? このまま動かすと、nullが入るだけのように思えるんだけど。
- 294 名前:nobodyさん mailto:sage [2008/02/08(金) 16:04:40 ID:???]
- Viewクラスの継承関係で、かいつまんだ一覧を書いておきます。
個別にはDocに書いてはあるけれど、こういう書き方みると分かりやすくない? Base - View - RenderView - IndexView ■Base(抽象)クラス[fw/framework/Base.php] (省略) ■View(抽象)クラス[fw/framework/View.php] ●プロパティ $post_file; // POSTするファイル名 ■RenderView(抽象)クラス[fw/abstract/views/RenderView.php] ●プロテクテッドメソッド & _onExecute(&$sender, $e) // _onRender(&$sender, $e)を呼ぶ & _onRender(&$sender, $e) // サブクラスにてオーバーラードする。 ■IndexViewクラス[fw/views/IndexView.php] ●コンストラクタ $this->post_file = 'index.php'; ●プロテクテッドメソッド & _onRender(&$sender, $e) // オーバーライド →html出力する。テキストボックスと送信ボタン
- 295 名前:nobodyさん mailto:sage [2008/02/08(金) 16:20:36 ID:???]
- >>293
1行上のフックハンドラ実行の結果を渡している。
- 296 名前:nobodyさん mailto:sage [2008/02/08(金) 16:41:04 ID:???]
- ロードメソッド[MainControl::_form_onLoad(&$sender, $e)]が(POSTパラメータが
無い場合に呼ばれるメソッド)呼ばれるまでの経緯をたどってみたが、非常に複雑だ。。。 [fw/index.php]が実行される。 Mainクラスのインスタンスが生成され、execute(&$app, $e)が実行される。 Base:: & execute(&$param, $e) にて、 Base:: & _onExecute(&$param, $e)が実行される。 これは、Main::execute(&$app, $e)にてオーバーライドされている。 Controlクラスのインスタンスが生成され、execute(&$app, $e)が実行される。 Base:: & execute(&$param, $e) にて、 Base:: & _onExecute(&$param, $e)が実行される。 これはControl:: & _ onExecute(&$param, $e)にてオーバーライドされている。 Control:: & _onExecute(&$param, \$e) にて、Control::_hookedUpControler(&\$sender, \$e)を呼び出す。 Control::_hookedUpControler(&\$sender, \$e) にて、Control::_form_onLoad(&$sender, $e)を呼ぶ。 これはMainControl::_form_onLoad(&$sender, $e)にてオーバーライドされている。 MainControl::_form_onLoad(&$sender, $e) が実行される。 継承関係 Base - Control - MainControl Base - Main
- 297 名前:nobodyさん mailto:sage [2008/02/08(金) 17:33:12 ID:???]
- リンク
symfony入門(1):symfonyで始めるPHPフレームワーク codezine.jp/a/article/aid/704.aspx?p=1 Zend Framework入門(1):フレームワークの全体像とインストール codezine.jp/a/article/aid/1824.aspx?p=1
- 298 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/08(金) 18:46:07 ID:???]
- >>285のファイルが落とせない・・・
- 299 名前:nobodyさん mailto:sage [2008/02/08(金) 19:33:52 ID:???]
- >>298 見れるはずですが・・以下はどうですか?
Eclipceでのデバッグ画面です ttp://proxy.f3.ymdb.yahoofs.jp/bc/4525b767_dfac/bc/452a/OOPFW_DEBUG.jpg?BC3YDrHBI.a6ljXl
- 300 名前:nobodyさん mailto:sage [2008/02/08(金) 22:21:47 ID:???]
- >>298どうでしょうか?
ttp://briefcase.yahoo.co.jp/bc/oopfw
- 301 名前:nobodyさん mailto:sage [2008/02/08(金) 22:24:55 ID:???]
- なんでPHP4文法でやってんの?
- 302 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/08(金) 23:53:42 ID:???]
- >>300でいけました。サンクスです。
- 303 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/09(土) 01:49:09 ID:???]
- これは、>>1さんのサイトでは、「入力フォームを作ってみる」とは
別で、「フレームワークを作ってみる」の演習という位置づけにした 方がいいかもしれないね。 これからの流れとしては、上のほうにあるように、このソースを 解読・改変していくための補助ドキュメント作成の方向と、 このフレームワークを使ってみる人のためのドキュメント作成 (チュートリアルみたいなもの)になるだろうね。 出来る範囲でみんなで手伝っていってみましょう。 このフレームワークは、MFCみたく、あらかじめ準備された クラスのメソッド中に書き加えていくスタイルなのかな? それとも、VBみたいにそういうソースコードを全部隠蔽 してしまう方向でいくのかな?ちょっと気になった。
- 304 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/09(土) 02:12:22 ID:???]
- こうやってソースを読んでみると、これまで抽象的に聞いていた
フレームワークを使ったプログラミングのメリットとデメリットが実感できるね。 今まで、システムを組む際はOOPやフレームワークを使う方向にするべきだと 思ってたけれど、そうでもなく、状況や目的に合わせて選択する というのが良い事が分かってきたような気がする。 小規模で全体概要を把握したいとか、移植性を考える場合は、フレームワークよりも、 クラスライブラリを使うスタイルの方が良い場合もありそうだ。
- 305 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/09(土) 08:12:13 ID:???]
- MVCでフレームワークを自作する方向と、クラスライブラリを自作する方向の
2つの方向をやってみて、それぞれのメリットとデメリットを確認していけば、 システムを作る場合の検討材料に出来ると思う。 何でもフルスクラッチしていき、なるべく依存性は無いようにし、(言語の バージョンくらいに収めるとか)その組み合わせでアプリを作る、みたいな。
- 306 名前:nobodyさん mailto:sage [2008/02/09(土) 09:45:19 ID:???]
- 再度リファクタしてみました。
ttp://briefcase.yahoo.co.jp/bc/oopfw [Controlクラス] ・リクエストオブジェクトの参照の重複の削除 ・サブクラスでのフックハンドラ処理修正 ・Viewオブジェクトの実行方法修正 ※これはViewオブジェクトハンドリングの自由度をました反面、 ユーザからの取り回しが煩雑になったかもしれませんね・・ [Modelクラス] ・継承関係の見直し、ItemBaseクラスの導入などです・・ MVCの継承関係が美しくないですが・・ >>291 リファクタしながら構成を練っていってますが 継承クラスでの責任が小さい単位で分割されていると 大きく修正が入った時も楽だと思います。 >>303 MFCもVB6もフックハンドラに処理を記述していく方式なので それを参考にしています、サンプルFWも自由にいじってもらって 参考にしてもらえたら良いと思います。 >>305クラスライブラリ方式もいいかもしれないですね。
- 307 名前:nobodyさん mailto:sage [2008/02/09(土) 10:20:45 ID:???]
- フレームワークのメリットとデメリットにおいて、なるべく具体例を書いた形でまとめてみた。
【メリット】 1.ビューとロジックの切り分けが出来る。(共同作業時に便利) www.atmarkit.co.jp/fdotnet/aspandvs/aspandvs01/aspandvs01_01.html 2.定型的なコードを何度も書かなくてよくなる。 例えば、ASP.NETでは、POSTの値を取得して・・・などの事を考えなくて良い。 テキストボックスやボタンも、画面にドラッグするだけ。 3.ソースコードが自動的にフレームワークの規約に従った記述方法となり、 全体的な処理構成が把握しやすく、メンテナンスが楽になる。 例えば、構造化プログラミングならば、まず全体構成(どの関数がどんな役割を 持っているかなど)を把握し、そこから問題部分を探すことになる。 フレームワークの場合は、まずはこのイベントハンドラの部分を見れば良いなという事が分かる。 【デメリット】 1.フレームワーク自体の使い方を学ばなければならない。 ・言語の基本ルールとは異なった、フレームワーク特有の記述方法があるため、すぐに組めない。 ASP.NETでは、IsPostBack の概念を学ばなければならない。 www.atmarkit.co.jp/fdotnet/dotnettips/043postback/postback.html ちいたんでは、function action( &$c )とか、$c->という書き方と機能を把握しなければならない。 php.cheetan.net/manual/tutorial.php ・フレームワーク自体にも得手・不得手など特徴があり、それを把握しなければならない。 ASP.NETはIISが必要な為、自動的にサーバOSはWindowsが必須となり、依存性がある。 ASP.NETとStrutsの比較は、以下のサイトを参照 www.atmarkit.co.jp/fdotnet/special/aspstruts01/aspstruts01_01.html 2.フレームワーク自体に問題があると対処が困難。 例えば.NET Framework のバグは、開発元の不具合修正を待つしかない。 オープンソースのフレームワークであっても、ソースコードが大量な為、把握が出来ない。
- 308 名前:nobodyさん mailto:sage [2008/02/09(土) 11:01:52 ID:???]
- QA方式で書いてみた。
Q:どんな時にフレームワークを使った方がいいの? ・短期間で仕上げなければならない時(この場合はフレームワークの使い方を把握しているのが前提) ・チームで分担してシステムを組む時 ・バージョンアップを行うなど、長期的な運用が想定される時 Q:フレームワークがあまり向かない場合は? ・個人で小規模アプリを組む時。(一度組んで終わりの場合など) ・そのアプリの全体構成をすみずみまで把握しておきたい場合 ・サーバの移植を想定しなければならないなど、環境があまり固定出来ない場合 このような状況の場合は、クラスライブラリの使用を検討すると良い。
- 309 名前:nobodyさん mailto:sage [2008/02/09(土) 11:18:48 ID:???]
- 何かフレームワークを使ったとして、そのフレームワークがいつまでメンテされるか
判らないことを考えると、バージョンアップをするようなアプリの開発に向いていると いえるかどうかは、かなり怪しいと思う。
- 310 名前:nobodyさん mailto:sage [2008/02/09(土) 11:25:52 ID:???]
- >>309
そういうケースもあるから入れるか迷ったんだよね・・・ だけど、現在の比較的規模の大きなアプリは何らかのフレームワークで 組まれている事実があるということで、書いてみた。 フレームワークのメンテが突然打ち切られるケースは無いと見ても 良いと思うけどね。事前に何らかのアナウンスがあるはず。 で、フレームワークそのものを入替える必要が生じた時は、もちろん 全部作り直しになるが、この労力は、フレームワークを使わない場合に 比べて楽だよね。という意見です。
- 311 名前:nobodyさん mailto:sage [2008/02/09(土) 12:20:07 ID:???]
- 書いてみた、とかって適当かつ無責任な
- 312 名前:nobodyさん mailto:sage [2008/02/09(土) 12:23:25 ID:???]
- 完璧な文章がいきなりかけるわけないんだから修正しながらでいいと思う。
適当だの無責任だのいうのなら、このスレに来なくて良いと思う。
- 313 名前:nobodyさん mailto:sage [2008/02/09(土) 12:32:04 ID:???]
- ひょっとして、つられた?
- 314 名前:nobodyさん mailto:sage [2008/02/09(土) 15:20:46 ID:???]
- つんでれた
- 315 名前:nobodyさん mailto:sage [2008/02/09(土) 15:25:19 ID:???]
- >>308
> Q:フレームワークがあまり向かない場合は? > ・そのアプリの全体構成をすみずみまで把握しておきたい場合 全体構成を隅々まで把握してなんの意味があるのだろうか? どうせ数日たったら忘れるんだし。 > ・サーバの移植を想定しなければならないなど、環境があまり固定出来ない場合 > このような状況の場合は、クラスライブラリの使用を検討すると良い。 PHP4、PHP5両対応のフレームワークもあるし、 いろんなデータベースに対応している場合もある。 フレームワークの開発というのは、そもそもが環境が固定されていないので そういう場合にはなおさらフレームワークを使ったほうが良い。
- 316 名前:nobodyさん mailto:sage [2008/02/09(土) 15:29:20 ID:???]
- 理解と記憶は別物だと思うけどな。
- 317 名前:nobodyさん mailto:sage [2008/02/09(土) 16:52:42 ID:???]
- >>315
> 全体構成を隅々まで把握してなんの意味があるのだろうか? > どうせ数日たったら忘れるんだし。 じゃ、この項目は消しておきます。 > PHP4、PHP5両対応のフレームワークもあるし、 > いろんなデータベースに対応している場合もある。 > フレームワークの開発というのは、そもそもが環境が固定されていないので > そういう場合にはなおさらフレームワークを使ったほうが良い。 PHPスレで言うのもなんだけど、ASP.NETなども含めた総論という考えだったんだけどね。 Windowsサーバなのかなどを気にするとか、PHP5のみ対応のフレームワークで 開発していて、PHP4しか対応していないサーバで動かすことになる場合を という意味で、環境が固定されない書きました。
- 318 名前:nobodyさん mailto:sage [2008/02/09(土) 17:04:40 ID:???]
- 修正案
Q:どんな時にフレームワークを使った方がいいの? ・短期間で仕上げなければならない時(この場合はフレームワークの使い方を把握しているのが前提) ・チームで分担してシステムを組む時 ・バージョンアップや不具合修正など、納品後もメンテナンスが想定される時 Q:フレームワークがあまり向かない場合は? ・個人で小規模アプリを組む時。(一度組んで終わりの場合など) ・サーバの移植を想定しなければならないなど、環境があまり固定出来ない場合 このような状況の場合は、クラスライブラリの使用を検討すると良い。
- 319 名前:nobodyさん mailto:sage [2008/02/09(土) 22:32:17 ID:???]
- あえてPHP4の構文でやってるのは、PHP4との互換性を保つため?
PHP5でやっちゃうと、PHP4の環境で動かなくなるから。
- 320 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/10(日) 03:19:14 ID:???]
- ChStrクラスの件を再開しようかな。
- 321 名前:1 ◆SWtzLesEmM mailto:age [2008/02/10(日) 18:45:04 ID:???]
- >>300
>ttp://briefcase.yahoo.co.jp/bc/oopfw ソースコードを見てビックリ!(・∀・) コメントが丁寧に書いてあり、OOPを学習する上でとても助かります! 貴重なサンプルを提供していただき、どうもありがとうございました。m(_~_)m 現時点で、バージョンがOOP_FW_02とOOP_FW_03の2つあるみたいですが、とりあえずOOP_FW_02の方をまとめページに掲載させていただきました。 ssurl.net/8vyv >>281 ssurl.net/cp7a ちょっとずつ読んでますが、全部はまだ理解できないです。(´;ω;`) レスも参考にしてみます。 (=分からないことでも、検索で調べるときのヒント・手掛かりになるので)
- 322 名前:nobodyさん mailto:sage [2008/02/10(日) 22:19:07 ID:???]
- >>321
乙です。m(_ _)m >>306ですが今後は ・認証の仕組み ・ロギングの仕組み ・エラーハンドリングの仕組み ・バリデイトの仕組み ・トークンの仕組み ・リダイレクトの仕組み ・入力→確認→完了の仕組み ・コアオブジェクトの実行権限の仕組み など実装していく予定です・・ でも、こればっかりやってるわけにいかないので 気長に見守ってやって下さい。
- 323 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/11(月) 02:31:35 ID:???]
- >>321
乙です。分かりやすくまとまっていますね。 私も少しずつ読んでいって理解しようと思っています。 他のものに比べ、コメントが多いのが助かりますよね。 >>322 読むほうも時間がかかると思いますので、 一気にやらなくていいと思います。(^^;
- 324 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/11(月) 02:35:18 ID:???]
- MVCフレームワークを作っていただいてる流れとはおもいっきり違う事をいうけれど。
>>1さんのOOPで掲示板を作るところは、もう少しクラスを分けたほうが いいと思ったので、自分なりに作ってみました。 index.phpに、いろいろと処理を詰め込んでいるような感があったので、 それを分ける考え方です。 しかし、DBはテキストベースにしているとか、書き込み欄と表示欄を 同じページにしているなど、基本構成から大幅に変えています。(^^; www.geocities.jp/narutobakijp2/ OOPの勉強として、簡易なBBSを作ってみました。 BBS Version1(2008.2.11)
- 325 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/11(月) 08:27:05 ID:???]
- クラス間のデータのやり取りにおいて、Listクラスを使う設計にしたけれど、
PHPの場合はハッシュでよかったような気がする件。 まだまだ未熟だな・・・ 今後は、これを構造化指向へ変換したプログラムを作り、うpする予定です。 この両方のプログラムを見比べてみることで、OOPのメリットとデメリットが 見えてくるかもしれません。
- 326 名前:nobodyさん mailto:sage [2008/02/11(月) 10:26:11 ID:???]
- OOPの継承やポリモーフィズムについての概念やそのコードの書き方に
ついては分かったけれど、その設計方法のノウハウの文章はぐぐっても なかなか見当たらない。 「設計というのはそれぞれで目的次第」といってしまえばそうだけど、 hiroxpepeさんのソースや、.NET Framework や java の各クラスの 継承関係の設計を見ていると、何か共通したものを感じる。 その具体的な方針と、それを取る理由がはっきりとは分からない・・・ 何か良い文章を見かけた、もしくは知っている方は、お願いします。
- 327 名前:nobodyさん mailto:sage [2008/02/11(月) 10:50:14 ID:???]
- ◎「メンテナンスを行う場合」の比較
【構造化指向の場合】 ソースコードに書かれている関数とグローバル変数が、どういう階層で組まれているか (どの関数でどの関数が使われているか。また、どのグローバル変数を使っているのか) は、その関数の処理内容と、その関係などを把握してからでないと、手をつけられない。 新しくグローバル変数や、関数を追加する場合。また、ローカル変数を宣言する場合は、 その名前がソースコード内で使われているかを都度チェックしなければならないので、 面倒である。 【オブジェクト指向の場合】 ソースコードそのものがクラス単位で分けられているため、手をつける場所がすぐに 分かる。他のクラスに影響するのは、そのクラスとのインターフェースを変更した場合のみ。 新しくメンバやメソッドを追加する場合は、そのクラスの中で使われているメンバや メソッドを確認するだけなので、対象となる範囲が狭く、チェックが楽。 また、プログラムそのものがクラスで部品化されるため、チームを組んで、分担作業で プログラミングがやり易い。 【注意】 構造化プログラミングであっても、関数やグローバル変数の名前の付け方を工夫すれば、 もちろん対応は可能である。そのため、メンテナンスを想定する場合は、 オブジェクト指向でなければならないわけでもない。 オブジェクト指向は、構造化指向に比べて特別に「これが出来る」というものではなく、 構造化指向で不便に感じる部分の便利機能である。
- 328 名前:nobodyさん mailto:sage [2008/02/11(月) 10:57:47 ID:???]
- >>324,325
なかなか参考になりました、ありがとう。 326さんのおっしゃる通り、"設計"は経験なんかも必要になってくるので、 考えるよりも手を動かして、簡単なスクリプトを組んでみるのが最良でしょうか。
- 329 名前:nobodyさん mailto:sage [2008/02/11(月) 12:43:38 ID:???]
- >>326
・リファクタリング―プログラムの体質改善テクニック マーチン ファウラー著 高いけどOOPに興味のある方には絶対お勧めですよ。 ポリモーフィズム適用の具体例がコードで解説されていますよ。 構造化プログラミングではGOTO構文を使うのはNGだけど 同様にOOPではswitch構文を使用しません。 ここの部分をポリモーフィズムで実装するのです。 あなたのプログラムにswitch構文がありますか? その部分はポリモーフィズムで置き換えられますよ。
- 330 名前:nobodyさん mailto:sage [2008/02/11(月) 12:53:28 ID:???]
- >同様にOOPではswitch構文を使用しません。
>ここの部分をポリモーフィズムで実装するのです。 これは言いすぎ。 OOの基本はモデリングであって、コーディングのスタイルじゃない。
- 331 名前:nobodyさん mailto:sage [2008/02/11(月) 13:07:00 ID:???]
- >>329
情報ありがとうございます。 > 構造化プログラミングではGOTO構文を使うのはNGだけど > 同様にOOPではswitch構文を使用しません。 > ここの部分をポリモーフィズムで実装するのです。 > あなたのプログラムにswitch構文がありますか? > その部分はポリモーフィズムで置き換えられますよ。 この表現はすごく分かりやすかったです。 こういう感じの具体的なノウハウがあると分かりやすいですね。 >>330 「言いすぎ」というご指摘もごもっともだと思います。 しかし、OOPは、構造化指向に比べてダントツで良い所があるわけでも ないので、(このため、すべてがOOPに移項してはいない。) 良いところを説明する際は、多少は強調した感じで言わざるを 得ないところがあると思っています。
- 332 名前:nobodyさん mailto:sage [2008/02/11(月) 13:39:48 ID:???]
- >>330
そうですね、確かに言い過ぎました・・ GOTO構文は習いませんでしたが、switch構文は習得しちゃいました。 あえてそれを使用しないで組んでみるのも勉強になるのではないでしょうか? 構造化的スタイルとOOP的スタイルを手っ取り早く理解しようとするなら それぐらいのパラダイムシフトが必要だと思うんです。 もちろんGOTO構文もswitch構文もコーディングには必要です。
- 333 名前:nobodyさん mailto:sage [2008/02/11(月) 15:01:11 ID:???]
- switchがいらないということは、
if文もいらないな。 それともswitchを使わずに、 if文で書けばいいのかw
- 334 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/11(月) 18:07:43 ID:???]
- >>328
(なんか、自分語りみたいなレスになっているけれど、 OOPの勉強方法についての意見交換にもなるかと思ったので書いておきます。) 私は、プログラミングをこれから勉強しようという時、「無駄・ムラ・無理なく 勉強する」という予備校の受験勉強の風潮を受けていましたので、先生に 「プログラミングを勉強する場合は、どんな風なやり方をしたら良いですか?」 とか「どんな順番で勉強をしていったら良いですか?」と聞いたことがあるのですが、 その先生は、「そんなことを考えている時間があるなら、その分コーディングを した方が良い」とアドバイスをしました。 実際に手を動かしてやってみると、文章や口頭の説明では言えない、何か体感的な ものが習得でき、その後の勉強方針もどうやったら良いのかが見えてきました。 「ああ、あの言葉は、こういう意味なんだな」と思いました。 プログラミングは、実技の世界なのだから、実際に手を動かしてみて見えてくるものだと 思っています。 過去に表計算をするプログラムを構造化指向で組むと、処理を関数に分けていく方法が 身についたなと思いました。なので、今度は、構造化指向で苦労をするプログラミングを してみると、OOPの良さが見えてくるのでは、と思っています。
- 335 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/11(月) 18:16:42 ID:???]
- BBSの構造化バージョンをうpしました。
ttp://www.geocities.jp/narutobakijp2/index.html OOPの勉強として、簡易なBBSを作ってみました。 BBS Version2(2008.2.11)入力したデータで改行に対応してなかったので、その部分を修正。 BBS Version2の構造化Ver(2008.2.11)上記プログラムの構造化バージョンです。
- 336 名前:nobodyさん [2008/02/12(火) 04:15:37 ID:E8FcAvF5]
- そもそも起動したら即終了するようなPHPプログラミングにOOを使う必要性が感じられない。
- 337 名前:nobodyさん mailto:sage [2008/02/12(火) 09:16:19 ID:???]
- ここは必要性を語るスレじゃないですよ
- 338 名前:nobodyさん mailto:sage [2008/02/12(火) 10:36:27 ID:???]
- >>336
なんで実行時間とOOの必要性に関連があるの? >>337 それは了見が狭すぎでしょ。
- 339 名前:nobodyさん mailto:sage [2008/02/12(火) 11:35:52 ID:???]
- >>336じゃないけど、オブジェクトは状態を保存しておくものだから。
複雑なデータを持つオブジェクトを作っても、mod_phpはリクエストの度にプロセス生成・終了するわけで、そのオブジェクトも消える。 そもそもウェブアプリはユーザからのリクエストを受けて処理が発生しする構造だから、オブジェクトを永続化しておくことにあまり意味はない。 オブジェクト指向に興味があるなら、GUIのあるアプリケーションとか、ゲームとかを作ってみるとよいよ。
- 340 名前:nobodyさん mailto:sage [2008/02/12(火) 12:57:39 ID:???]
- 永続化されていないオブジェクトには意味がほとんどないという主張ならば、どうだろうね。
Booch先生も、「永続性」に対して、「有用ではあるがオブジェクトモデルにとって なくてはならない要素というわけではない」 って言ってるし。 (もう絶版だけど、Booch法第2版 2.2節より)
- 341 名前:nobodyさん mailto:sage [2008/02/12(火) 13:17:09 ID:???]
- >>336だけどphpはプロセスを生成してから破棄するまでに処理を1度しか行わない関数?が多いし、
イベントが非同期で発生したりするわけでもないからOOを使うのはどうかなー?って気がする。 だいたいフローチャートで処理書けちゃうしね。 あとデータベースなりファイルなりからデータを読み込んでそれをオブジェクトの形に整形して・・・・ って処理が無駄な気がする。 実際に行う処理よりもその整形処理が長かったりするとなんか本末転倒なような。
- 342 名前:nobodyさん mailto:sage [2008/02/12(火) 13:23:42 ID:???]
- >>341
>あとデータベースなりファイルなりからデータを読み込んでそれをオブジェクトの形に整形して・・・・ >って処理が無駄な気がする。 なるほど、それはそうだね。 いわゆるロジック的なものがほとんどない Webアプリってのは存在するし。(っていうか大半かも) フレームワークでもなんでも、整理してるつもりで回りくどいだけってのは多い気がする。 話に付き合ってくれて、どうもありがと。
- 343 名前:nobodyさん mailto:sage [2008/02/12(火) 14:28:33 ID:???]
- > いわゆるロジック的なものがほとんどない Webアプリってのは存在するし。(っていうか大半かも)
どう考えても少数だろw ロジック無しで何が作れるというんだ?w
- 344 名前:nobodyさん mailto:sage [2008/02/12(火) 14:34:01 ID:???]
- > そもそもウェブアプリはユーザからのリクエストを受けて処理が発生しする構造だから、オブジェクトを永続化しておくことにあまり意味はない。
その理屈だと、PHPに限らず、JavaでもRubyでもオブジェクト指向は要らないということになるな。 それにアプリでも終了すると消えるわけで、結局はウェブアプリと同じ。 そもそもデータベースやファイルにデータを保存するのも オブジェクトの保存・永続化なわけだが? > あとデータベースなりファイルなりからデータを読み込んでそれをオブジェクトの形に整形して・・・・ > って処理が無駄な気がする。 > 実際に行う処理よりもその整形処理が長かったりするとなんか本末転倒なような。 だからフレームワーク使うんじゃん。
- 345 名前:nobodyさん mailto:sage [2008/02/12(火) 14:42:23 ID:???]
- >>343
単純に、SQLにパラメータ設定して、実行して、検索結果をエスケープしてHTML/XMLのタグつけて 返してるだけで出来てるWebアプリって多そうだけどな。ロジックというほどのもんでもないでしょ。 >>344 ムダなのは実装時間じゃなくて、CPU時間でしょ。 フレームワークで解決する問題じゃないと思うが。
- 346 名前:nobodyさん mailto:sage [2008/02/12(火) 14:50:23 ID:???]
- >>345 訂正
「本末転倒」って言葉からすると、実装量なのかな。 取り消します。
- 347 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/12(火) 18:36:45 ID:???]
- >>341
> あとデータベースなりファイルなりからデータを読み込んでそれをオブジェクトの形に整形して・・・・ > って処理が無駄な気がする。 > 実際に行う処理よりもその整形処理が長かったりするとなんか本末転倒なような。 これはもともとOOPの特性じゃない? 再利用性や保守性を高めるために、他の処理とを完全に切り分ける代わりに、 構造化指向よりも、コード量が多く、動作が重くなるというのは。 これは、個人で組む小規模プログラムでは無駄でしかないが、チームで組んだり、 改変がある場合には威力を発揮する、という類のことでしょ。
- 348 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/12(火) 18:50:13 ID:???]
- 確かに私もWebアプリの世界ではOOPの意味は少ないと思う。
指摘にあるように、フローチャートがかけるような処理しかしていないので、 主にPerlやPHPで構造化指向でコーディングするスタイルが流行っているのだと思う。 (PerlやPHPのOOP対応は未だに不十分なところがある) また、ネットにあるサンプルアプリは構造化指向のものが非常に多い事からも、 構造化指向で十分に組めることを意味しているのだと感じる。 通常だと、「だったら、WebアプリをOOPで組む必要ないよね。」となるわけだが、 私がそれでもあえてOOPをやっているのは、その有用性などを自分で体感する形で 確認したいからだ。 大規模なアプリとなると、WebアプリでもOOPを活用して組むことが多いと聞くが、 それは具体的にどのような場面で、どのような有用性があるからなのか。それらを確認したい。 最近は、どうも(Webアプリの世界では)OOPの有用性を見るよりも、 各種フレームワークの有用性を確認した方が良いのでは、と感じている。
- 349 名前:nobodyさん mailto:sage [2008/02/12(火) 19:23:14 ID:???]
- > 確かに私もWebアプリの世界ではOOPの意味は少ないと思う。
> 指摘にあるように、フローチャートがかけるような処理しかしていないので、 OOPの意味が少ないの理由がおかしい。 フローチャートがかけるような処理しか”貴方が”していないから 必要ないといっているだけであって、そうではないものはOOPの意味がある。 「Webアプリはフローチャートがかけるような処理」という前提がそもそもおかしい。 > 大規模なアプリとなると、WebアプリでもOOPを活用して組むことが多いと聞くが、 > それは具体的にどのような場面で、どのような有用性があるからなのか。それらを確認したい。 OOPの有効性、そのものがわかってないだけじゃないか? > 最近は、どうも(Webアプリの世界では)OOPの有用性を見るよりも、 > 各種フレームワークの有用性を確認した方が良いのでは、と感じている。 各種フレームワークは、すべて(といって問題ないレベルで)OOPで 作られていることを知らないの?
- 350 名前:nobodyさん mailto:sage [2008/02/12(火) 19:40:22 ID:???]
- >>349
別にOO的なモデリングをしなくても複雑さが増大しないのであれば、OOを選択するのは技術的な理由ではないでしょ。 前提がおかしいと主張するなら、どうおかしいのか言わないと、それこそ意味がない。
- 351 名前:nobodyさん mailto:sage [2008/02/12(火) 19:58:37 ID:???]
- >>349
じゃあ貴方がOOPを教えてあげたら?
- 352 名前:nobodyさん mailto:sage [2008/02/12(火) 20:39:12 ID:???]
- >>349
どういう利点があんの?
- 353 名前:nobodyさん mailto:sage [2008/02/12(火) 22:43:18 ID:???]
- クラスを使ってるだけで、オブジェクト指向でも何でもないよ。ウェブフレームワークは。
オブジェクト指向を謳うなら、オブジェクトをシリアライズしてDBやセッションに保存するくらいはしないと。 そんなフレームワークがどれだけある?
- 354 名前:nobodyさん mailto:sage [2008/02/12(火) 22:58:38 ID:???]
- なんで永続性に拘るんだろ。
- 355 名前:nobodyさん mailto:sage [2008/02/12(火) 23:01:04 ID:???]
- なんでオブジェクトに拘るのかってこと。
- 356 名前:nobodyさん mailto:sage [2008/02/12(火) 23:08:25 ID:???]
- ウェブアプリで扱うデータのほとんどはRDBMSだけど、RDBMS自体はフラットなデータ構造でまったくオブジェクト指向ではない。
だから、RDBMSからオブジェクトにいったん変換するんだけど、最終的にはHTMLというやはりフラットな構造に戻さないと行けない。 例えばgmailみたいに非常に複雑な処理が要求されるサイトなら、いったんオブジェクトにするのは有効と思うけど、gmailみたいなサイトは例外的。 ほとんどのウェブサイトは、ただDBに入った値を表示するだけでいい。
- 357 名前:nobodyさん mailto:sage [2008/02/12(火) 23:14:02 ID:???]
- >>356 あっそ、じゃおまえがオブジェクト使わずに書けばいいだけじゃね?
- 358 名前:nobodyさん mailto:sage [2008/02/12(火) 23:19:02 ID:???]
- OOプログラミングってのは、OO的にモデリングしたものをプログラミングすることであって、
オブジェクトを使ってプログラミングすることではないでしょ。 これを区別しないのは 「VC++で作ったからオブジェクト指向だ」って言うのと同じ。
- 359 名前:nobodyさん mailto:sage [2008/02/12(火) 23:28:46 ID:???]
- >>358
概念じゃなく具体的なコードで説明して下さいお願いします。
- 360 名前:nobodyさん mailto:sage [2008/02/12(火) 23:37:53 ID:???]
- そんなんムリ( ゚Д゚) 本でも読んで勉強して。
今まで読んだ本でOOに関して一番良かったのは Booch法:オブジェクト指向分析と設計 なんだけど、 いくら Booch法自体が古いとは言え、こうした本が絶版になってしまっているというのは、なんとも悲しい。
- 361 名前:nobodyさん mailto:sage [2008/02/12(火) 23:59:12 ID:???]
- 勉強したい人が集まってるんだから、必要・不必要で論争しなくても……。
- 362 名前:nobodyさん mailto:sage [2008/02/13(水) 00:22:08 ID:???]
- >>336だけど話が広がり過ぎて正直びっくりしてる。
別にOOPしてもいいと思うよ。 俺もクラス使うし。 ただWebプログラミングだとクラス使っただけの手続き型プログラムになりがちだから OOPの恩恵に与りにくいんじゃないかなーって思っただけ。 たとえば俺はいまPHPでゲーム組んでるんだけど 普通のゲームプログラムとかだと $char_list[] = new Player(); for($i=0; $i<N; $i++) { $char_list[] = new Enemy(); } while($game_loop) { foreach($char_list as $char) { $char->Move(); $char->CheckHit(); $char->Draw(); } } exit(0); みたいな感じになるけど
- 363 名前:nobodyさん mailto:sage [2008/02/13(水) 00:22:41 ID:???]
-
Webプログラミングだと $buf = DataRead(); $player = new Player(); $player->SetData($buf); $player->Move(); $player->CheckHit(); $player->Draw(); $buf = $player->GetData(); DataWrite($buf); exit(0); みたいなのになりがちじゃん。
- 364 名前:nobodyさん mailto:sage [2008/02/13(水) 00:23:37 ID:???]
- それなら
DataRead(); PlayerMove(); PlayerCheckHit(); PlayerDraw(); DataWrite(); exit(0); でもいいじゃん的な気がするってだけ。 まぁひとえに俺のプログラミング力不足だと思うけど。
- 365 名前:nobodyさん mailto:sage [2008/02/13(水) 00:42:03 ID:???]
- また Booch法から引用すると 「ハンマーを手にする者には世界中の全てのものが釘に
見えるように、オブジェクト指向の考えに染まった開発者は世界中の全てのものがオブジェクトで あると考え出す。この観点は少々無邪気すぎる。」だそうで、若干感情的な議論を呼びやすい テーマではあると思う。 そういえば、同じ様なことが フラクタルとか 1/fゆらぎの本にも書いてあったな。 人間なんてそんなもんだ。
- 366 名前:nobodyさん mailto:sage [2008/02/13(水) 09:32:28 ID:???]
- >>360
・構造化プログラミング三要素 STEP01 順次進行 STEP02 条件分岐 STEP03 繰り返し ・OOプログラミング三要素 STEP04 カプセル化 STEP05 継承 STEP06 ポリモーフィズム WEBデザイナがPHP使ったところでSTEP01止まり、 MS OFFICEのマクロ/VBAもそんな感じだね。 ifやforを使わず延々と処理を記述してるのあるよね。 STEP04で思考を止めちゃ駄目なんだ。 勉強の為に「継承」「ポリモーフィズム」を使った プログラムをあえて書いてみるんだ。 モデリング云々とかそんなの関係ないんだよ。 そもそもここは>>1でしょ?
- 367 名前:nobodyさん mailto:sage [2008/02/13(水) 11:21:35 ID:???]
- >モデリング云々とかそんなの関係ないんだよ。
思考を止めてるのは誰だよ。
- 368 名前:nobodyさん mailto:sage [2008/02/13(水) 11:29:38 ID:???]
- モデリング無しにOOPで書けるんですか?
- 369 名前:nobodyさん mailto:sage [2008/02/13(水) 11:42:59 ID:???]
- >>367>>368
じゃあモデリング房が設計について判りやすく教えたら? OOPの概念すら理解出来ない初心者に上流から教えるんですか? ぐだぐだ言ってないで初心者に判りやすく為になる発言したらどう?
- 370 名前:nobodyさん mailto:sage [2008/02/13(水) 11:50:58 ID:???]
- モデリングが重要かもしれないっていう情報を教えてもらったんだから、それで満足しろよ。
あとは自分で本でも読め。
- 371 名前:nobodyさん mailto:sage [2008/02/13(水) 11:52:02 ID:???]
- この基地外まだいるのか
- 372 名前:nobodyさん mailto:sage [2008/02/13(水) 12:09:17 ID:???]
- >>370
あれれ?モデリングを判りやすく教えてくれるんじゃないんだ? さては本当は自分も理解して(ry
- 373 名前:nobodyさん mailto:sage [2008/02/13(水) 12:27:30 ID:???]
- OOP有用性の議論にDBの実装の話がこびり付いている。
純粋な議論ではないと思う。
- 374 名前:nobodyさん mailto:sage [2008/02/13(水) 13:28:08 ID:???]
- 熱意ある奴がケーススタディとして『やってみて』いるんだからさ
酸いも甘いも知ってる方はOOPで作るべきっていう良いお題を 出してあげたら盛り上がるんじゃないか
- 375 名前:nobodyさん mailto:sage [2008/02/13(水) 15:14:37 ID:???]
- PHPでOOPの議論すること自体おかしい
オブジェクト指向が有用だからこそ java,c++.c#,ruby最近の言語は全てOOPになってる 大規模なものをつくるのにOOPじゃないと非効率すぎる
- 376 名前:nobodyさん mailto:sage [2008/02/13(水) 15:17:14 ID:???]
- 簡単にいうと
規模が小さいほどOOPの必要性が無くなり 規模が大きいほどOOPの必要性がでる
- 377 名前:nobodyさん mailto:sage [2008/02/13(水) 15:18:55 ID:???]
- 規模が小さいならスパゲッティコードが最強てこと
大きいならOOPじゃないとはなしにならない
- 378 名前:nobodyさん mailto:sage [2008/02/13(水) 15:21:38 ID:???]
- OOを議論するのにPHPをベースにするのはどうかと思うが、PHPにおけるOOを議論することは良いんじゃないの。
あと、規模というよりは複雑さだろうな。
- 379 名前:nobodyさん mailto:sage [2008/02/13(水) 15:35:17 ID:???]
- OOPの話は荒れる元だな・・・よし、
〜〜〜〜〜〜〜〜〜ここからOOPネタ禁止〜〜〜〜〜〜〜〜〜〜〜〜〜〜
- 380 名前:nobodyさん mailto:sage [2008/02/13(水) 16:30:31 ID:???]
- (OO)P
↑ マスコット(笑) 名前はオッピー君。 育ち盛りのオスです。 パスタは嫌いだよ! 最近、俺俺オブジェクト指向にはまって 同僚達から嫌われる羽目にw そんな落ち目のオッピー君と一緒にオブジェクト指向の真髄を極めよう!
- 381 名前:(OO)P 名前はオッピー君。 mailto:sage [2008/02/13(水) 16:32:38 ID:???]
- おいらに力を・・・・
- 382 名前:nobodyさん mailto:sage [2008/02/13(水) 20:00:42 ID:???]
- どうして荒らしが粘着し始めたのだろう。
- 383 名前:nobodyさん [2008/02/13(水) 23:26:03 ID:yj0olWG5]
- 思い切って質問してみる。
テーブルAの操作をするクラスA、テーブルBの操作をするクラスBを作った。 両方のクラスで個別に接続するより、1番最初に接続して、その接続IDを使って処理させたほうがいいのかな?
- 384 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/13(水) 23:56:35 ID:???]
- >>383
取得するテーブルの数ごとに別々に接続はしない方がいいよ。 DBの処理負荷が大きくなるから。 私だったら、テーブルごとにクラスを分けたりはしないかな。 テーブルの構成そのものを隠蔽するために。 検索と更新は同じフォーム上では行わない前提にして、こんな感じにするかな。 // 接続に関するクラス // PostgreSQLに接続する為のメンバとメソッドを持つ。 class CDB_PostgreSQL // MySQLに接続するためのメンバとメソッドを持つ。 class CDB_MySQL // 個人情報の検索をするクラス。 // 以下の検索メソッドを持つ // ・電話番号を指定し、候補の個人情報一覧を得る。 // ・苗字を指定し、候補の個人情報一覧を得る。 // このクラスのメンバに上記2つのどちらかのDBクラスを持たせる。 class CSearch_Personal // 個人情報の更新をするクラス。 // 以下の更新メソッドを持つ // ・主キーを指定し、個人情報を更新する。 // ・新しい主キーを設定し、個人情報を新規追加する。 // このクラスのメンバに上記2つのどちらかのDBクラスを持たせる。 class CUpdate_Personal
- 385 名前:383 [2008/02/14(木) 00:16:52 ID:nkc61sHT]
- コードまで丁寧にありがとう。
クラス設計は、慣れがないと難しいね……。 > このクラスのメンバに上記2つのどちらかのDBクラスを持たせる。 申し訳ないんだけど、「メンバにクラスを持たせる」の意味が理解できない。 少し補足してもらえるとありがたいんだけど、ダメかな?
- 386 名前:nobodyさん mailto:sage [2008/02/14(木) 03:29:07 ID:???]
- 規模と言うか、どれだけ複雑なロジックがあるかだよね。2ちゃんねるは物凄く規模が大きいけど、ロジックはごく単純。ただの掲示板だもん。
- 387 名前:nobodyさん mailto:sage [2008/02/14(木) 03:30:36 ID:???]
- テーブルAを操作するモデルクラスAとは行かない場合もあるよ。リレーションがある場合。
- 388 名前:nobodyさん mailto:sage [2008/02/14(木) 05:53:07 ID:???]
- テーブルクラスはDBクラスと分けて
テーブルの中からgetConnection()するのが普通だよ コネクション管理とテーブルを切り離す
- 389 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/14(木) 08:04:05 ID:???]
- >>385
設計の仕方は、その人が作ろうとするアプリ次第なので、その人が やりやすいスタイルでやっていいと思うよ。 OOPの設計理論は、あくまで一般論なので、必要性を感じないのであれば、 必ずしも守らなくていいだろう。 私は、DBをPostgreSQLからMySQLへ変換する必要性も生じることを 想定した設計をしただけだよ。 こうやっておけば、書き換えるコードも少なくて済む。 class CSearch_Personal{ // DBを格納する var $m_db; // コンストラクタ function CSearch_Personal(){ $db_info = ""; // ここでDB接続に必要な情報を入れる。 $this->m_db = new CDB_PostgreSQL($db_info); } // 電話番号で検索 function Search_by_TEL($tel){ $sql_str = "SELECT * FROM TableA WHERE TEL = '" . $tel . "'"; $this->m_db->Execute($sql_str); // ここで、データをうけとり、返す。 } }
- 390 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/14(木) 08:07:28 ID:???]
- どうしてもテーブル単位でクラスを作る場合は、こんな感じになるのかな。
// PostgreSQLへ接続処理などを管理する基底クラス(抽象) class CDB_PostgreSQL_Connection // TableAの操作を管理するクラス。 class CDB_TableA extend CDB_PostgreSQL_Connection // TableBの操作を管理するクラス。 class CDB_TableB extend CDB_PostgreSQL_Connection
- 391 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/14(木) 08:26:42 ID:???]
- OOPの設計をする場合は、処理を文章で書き表して、
その中から名詞や役割を抽出していけばいいと聞いたことがある。 その単位を1つのオブジェクトとして設計する。 1つのオブジェクトを、1つのクラスとしてコーディングする。
- 392 名前:nobodyさん mailto:sage [2008/02/14(木) 08:57:14 ID:???]
- >>390
CDB_PostgreSQL_Connectionを拡張してCDB_TableAにするのはまずい 子クラスと親クラスはis_a関係にしないといけない 言い換えると子クラスは親クラスの範疇に含まれていないといけない テーブルがコネクションの一部でないことは明らか
- 393 名前:nobodyさん mailto:sage [2008/02/14(木) 10:58:27 ID:???]
- 異論はあるだろうけど、SQLに関しては、パフォーマンスの都合上実装の仕方が限定されるから、
モデルに合わせて考えるのではなくて、SQLを考えてから、それに会うモデル(クラス構造)を考えた 方が良いと思う。
- 394 名前:nobodyさん mailto:sage [2008/02/14(木) 11:05:10 ID:???]
- >>393
kwsk
- 395 名前:nobodyさん mailto:sage [2008/02/14(木) 11:09:12 ID:???]
- 具体的に聞かれないと、答えようがない。
- 396 名前:nobodyさん mailto:sage [2008/02/14(木) 11:30:06 ID:???]
- >>393
テーブル構造が複雑な場合、そういうのもアリだと思うけど それはオブジェクト指向じゃないよね
- 397 名前:nobodyさん mailto:sage [2008/02/14(木) 12:00:13 ID:???]
- 微妙だけど、抽象化のレベルが低い(計算機寄りな)だけで、OOではあると思ってる。
ただDBアクセスについて、パフォーマンスを保ったまま、高い抽象化ができない・やりにくい というのは、OOが本質的にDB向きではないということだと考えてる。
- 398 名前:nobodyさん mailto:sage [2008/02/14(木) 12:33:45 ID:???]
- とりあえずDBアクセスはPDOでいい。
各操作系に保持させるならプリペアドステートメントを。 個人的には各テーブルってよりも各テーブルのレコードクラスを作るかなー。 テーブルに対する操作は静的メソッドで実装する。 どうでもいいがクラスってのは抽象データ型なので関数と比べるなんてしてるとハマる。
- 399 名前:nobodyさん mailto:sage [2008/02/14(木) 12:59:49 ID:???]
- UMLモデリングツールでPHP書いている人いる?
具体的には「Umbrello」を業務で使っている人
- 400 名前:nobodyさん mailto:sage [2008/02/14(木) 13:18:17 ID:???]
- C#の記事だけど、継承に関するものをみつけた。
Column - 継承を使うべき場合、使うべきではない場合 - www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_004/cs2_004_03.html#cs0406
- 401 名前:nobodyさん mailto:sage [2008/02/14(木) 14:54:28 ID:???]
- >>397
> というのは、OOが本質的にDB向きではないということだと考えてる。 逆逆、リレーショナルデータベースが、OO向きじゃない。
- 402 名前:nobodyさん mailto:sage [2008/02/14(木) 15:00:26 ID:???]
- >>398
> 各操作系に保持させるならプリペアドステートメントを。 プリペアドステートメントは条件の数を変えにくいという 大きな欠点があるからなぁ。 > 個人的には各テーブルってよりも各テーブルのレコードクラスを作るかなー。 一般に言われている、ActiveRecordパターンですね。 Ruby on RailsやCakePHPで採用されている奴です。
- 403 名前:nobodyさん mailto:sage [2008/02/14(木) 15:08:57 ID:???]
- >>383
> テーブルAの操作をするクラスA、テーブルBの操作をするクラスBを作った。 > 両方のクラスで個別に接続するより、1番最初に接続して、その接続IDを使って処理させたほうがいいのかな? 処理の負荷というより、決定的な問題がある。 それは主にトランザクションを使ったときに起こる。 複数のテーブルを操作することで、一つの処理を完成させる場合 中途半端な状態を他に見せないようにしなければいけないし、 また一つのテーブルで処理が失敗した場合すべてを元に戻さなければならない。 これを実現する為に同じ接続から見える状態と、違う接続からみえる状態で 違うことがある。
- 404 名前:nobodyさん mailto:sage [2008/02/14(木) 15:18:21 ID:???]
- PHPやWebアプリに限らないけど、OOPってのはフレームワークを作るためにある。
ここで言うフレームワークには、汎用の名前があるフレームワークだけじゃなく たとえばあるゲームの独自の基本システムなんていったものも含む。 このフレームワークを使って作るもの・・・すなわち、 フレームワークから呼び出されるコードは、単純な処理になるので (というか単純な処理ですむ為のフレームワーク) OOPにならないことが多い。 だからといって、システム全体がOOPになっていないとは思わないけどね。 システム全体の一部。つまりクラスの中のメソッドだけを見て 非OOPというのはおかしいでしょ?
- 405 名前:nobodyさん mailto:sage [2008/02/14(木) 15:30:26 ID:???]
- >>404
誰に言ってるの??
- 406 名前:nobodyさん mailto:sage [2008/02/14(木) 15:35:44 ID:???]
- 誰に言ってるのかも気になるが、そんなこと誰が言ってるのかも気になる。
OOPがフレームワークのためにあるという主張は初めて聞いた。
- 407 名前:nobodyさん mailto:sage [2008/02/14(木) 15:36:31 ID:???]
- >>384 も >>389 も >>390 も気持ち悪すぎだ
普通に考えるとこういう感じだろう? // 接続に関する抽象クラス。汎用で使える関数があれば定義しても良い。 class CDB_Connection {} // PostgreSQL接続用クラスの実装 class CDB_PostgreSQL extends CDB_Connection {} // MySQL接続用クラスの実装 class CDB_MySQL extends CDB_Connection {} // テーブルに関する抽象クラス。汎用で使える関数があれば定義しても良い。 class CTable {} // 個人情報クラス。 class CPersonal extends CTable{ function CSearch($connection) {} //コンストラクタかメソッドでコネクションと接続 function search() {} function update() {} }
- 408 名前:nobodyさん mailto:sage [2008/02/14(木) 15:41:23 ID:???]
- >>407
概ね同じ意見だけど、Cpersonalを実体化する必要ってあんまりなさそうだから、 自分はメソッドを staticにすることが多い。 あと、connection をオブジェクト内部にもってしまうと、そのオブジェクトはいつでも SQLを実行できてしまうので、引数で渡すようにしてる。 (まぁ、staticにしたら引数で渡すしかないけど)
- 409 名前:nobodyさん mailto:sage [2008/02/14(木) 15:45:33 ID:???]
- >>408 に補足
必要性がないというより、CTable (のサブクラス)のインスタンスをnewするということは、 意味論的には、そのテーブル自体を新規に生成するということだから、ちょっと気持ち悪い。
- 410 名前:nobodyさん mailto:sage [2008/02/14(木) 15:48:44 ID:???]
- >>389
> 私は、DBをPostgreSQLからMySQLへ変換する必要性も生じることを > 想定した設計をしただけだよ。 > こうやっておけば、書き換えるコードも少なくて済む。 とか言っておきながら、 > // コンストラクタ > function CSearch_Personal(){ > $db_info = ""; // ここでDB接続に必要な情報を入れる。 > $this->m_db = new CDB_PostgreSQL($db_info); > } CSearch_Personalのコンストラクタで CDB_PostgreSQL決め打ちなのはナンセンス。 DBをPostgreSQLからMySQLへ変換する必要性も生じることを想定した設計というのなら 設計としては、Personalデータを扱う(Search専用?)クラスは 接続するデータベースに依存すべきではない。 (限られた環境だけで動くものを作ればいいだけならどうでもいいが) 接続オブジェクト(CDB_PostgreSQL)はCSearch_Personalクラス外部から 与える。そのときの引数は(PHPに厳密な型は無いが)抽象クラスのCDB_Connection型で与える。 こうすることで、DBをPostgreSQLからMySQLへ変換する必要が生じたとき、 CSearch_Personalを一切修正しないですむ。
- 411 名前:nobodyさん mailto:sage [2008/02/14(木) 15:49:17 ID:???]
- >>404は、「バージョン6までのVBって構文は構造化だけど、
内部的にはクラスが動いているんだよ」といってるのと 同じ意味のように思える。 誰に何を伝えたいのかは良く分からないが。
- 412 名前:nobodyさん mailto:sage [2008/02/14(木) 15:51:40 ID:???]
- >>408-409
まあ、そこは設計しだいでいくつかやり方があるけど、 ActiveRecordパターンの場合、インスタンスはテーブルを作るという意味ではなく、 クラスがテーブル全体で、そのインスタンスはテーブルのレコードという扱いになる。 そしてフィールドがプロパティ。
- 413 名前:nobodyさん mailto:sage [2008/02/14(木) 15:53:27 ID:???]
- >>411
一応突っ込み。VBにはクラスがある。(少なくとも5以上) もちろんnewでインスタンスも生成できる。
- 414 名前:nobodyさん mailto:sage [2008/02/14(木) 16:01:23 ID:???]
- >>412
これですかね。 www.martinfowler.com/eaaCatalog/activeRecord.html 細かいけど、 >そのインスタンスはテーブルのレコードという扱いになる。 なら、searchメソッドは、staticなり外部に置くのではないかと思う。 確かに updateはこの場合 staticにすべきものではないですね。失礼。
- 415 名前:412 mailto:sage [2008/02/14(木) 16:03:01 ID:???]
- >>408
> あと、connection をオブジェクト内部にもってしまうと、そのオブジェクトはいつでも > SQLを実行できてしまうので、引数で渡すようにしてる。 なんで「そのオブジェクトはいつでも SQLを実行できてしまう」のが悪いのかわからないけど、 > (まぁ、staticにしたら引数で渡すしかないけど) これが理由なら、そのクラスをシングルトンパターンで 実装するという方法もある。 CPersonal::search() などという書き方で呼べるぞ。 ただし、PHP4に対応した書き方だとすごく気持ち悪いんだが(笑) CakePHPでgetInstance()というメソッドをキーワードにして探せば 実装例が見つかると思う。 getInstance()関数内のstatic変数に配列[0]にで確保(なぜ?)した後 各メソッドの初めで$_this = getInstance() して$_thisで参照するという・・・ まあ見たほうが早い(?)
- 416 名前:nobodyさん mailto:sage [2008/02/14(木) 16:13:08 ID:???]
- >>415
>なんで「そのオブジェクトはいつでも SQLを実行できてしまう」のが悪いのかわからないけど、 DBなんて巨大なグローバル変数の固まりみたいなものだし、アクセスもメモリと比べて遅いし、 トランザクションの都合からもある範囲でDBアクセスしている可能性がないかが 簡単に見分けられないのは怖いと思うけど。
- 417 名前:412 mailto:sage [2008/02/14(木) 16:13:24 ID:???]
- >>414
> なら、searchメソッドは、staticなり外部に置くのではないかと思う。 あー。staticでいいです。単に個人的な環境の理由から PHP4を使っていて忘れていただけです。
- 418 名前:412 mailto:sage [2008/02/14(木) 16:17:15 ID:???]
- >>416
でもどっちみちデータベースに操作を出来るところなら、 コネクション知っているわけで、結局同じことでしょ? それにクラスの変数はグローバル変数じゃないからw
- 419 名前:nobodyさん mailto:sage [2008/02/14(木) 16:33:55 ID:???]
- >>418
必要なメソッドにしか connection を渡さず、オブジェクト内に保存しないことで、 「データベースに操作できるところ」を限定するという話。 connection をDBアクセスする権限と見るならば、その権限は処理に対して与えるべきで、 オブジェクトに対して与えるべきではないだろうということ。
- 420 名前:nobodyさん mailto:sage [2008/02/14(木) 17:56:06 ID:???]
- DB周りはZendFrameworkの実装でなんら不満ないなあ。
- 421 名前:412 mailto:sage [2008/02/14(木) 18:14:31 ID:???]
- >>419
しかし、テーブルに関するクラスでデータベースを操作しないメソッドって あまりないからなぁ。まあ別にいいけどね。
- 422 名前:nobodyさん mailto:sage [2008/02/14(木) 18:51:49 ID:???]
- >>421
例えば Personテーブルに depart_codeがあるとして、$person->getDepartName() としたときに、 暗黙のうちにdepart_codeをキーとしてDepartテーブルから検索する SQLが実行されたら嫌だし、 setPersonNameされたときに、そのタイミングでupdateが実行されていないか疑わなきゃいけないのも嫌。
- 423 名前:nobodyさん mailto:sage [2008/02/14(木) 19:13:43 ID:???]
- >>422
メソッドの実装がどうなってようが呼んだ方の知ったこっちゃないだろ。 そのどっちの例もそのクラスの仕様なんだから。 それを外側から知ろうとか制御しようだなんておかしな話だ。
- 424 名前:nobodyさん mailto:sage [2008/02/14(木) 19:41:54 ID:???]
- そもそもstaticも存在しないPHP4で機能をまとめたようなクラス(CDB_PostgreSQLクラスみたいなの)
を作ろうとしてるのが気持ち悪い。 しかもOOPなんてデータベースの各要素に関数をくっつけたようなもんなんだから既存のデータを単体でしか扱わない データベースと相性が悪いのは分かりきったことだろう。
- 425 名前:nobodyさん mailto:sage [2008/02/14(木) 19:54:36 ID:???]
- OOPはデータベースの各要素に関数をくっつけたようなもの?
既存のデータベースはデータを単体でしか扱わない? だからOOPとデータベースと相性が悪い? ( ゚Д゚) ワカラナイ
- 426 名前:412 mailto:sage [2008/02/14(木) 20:04:12 ID:???]
- >>424
staticはあくまでstaticだよと明示しているだけで 本質的には必要なものとは思えないけど。便利だけどね。 それと、CDB_PostgreSQLは「機能をまとめたクラス」ではないよ。 たとえば一つのアプリでサーバー負荷分散などで、 複数の接続を使用するときとか、複数のインスタンスが出来る。
- 427 名前:nobodyさん mailto:sage [2008/02/15(金) 07:09:54 ID:???]
- PHPでもメンバポインタとかつかえれば
インスタンスに縛られない柔軟なOOPができるのにな
- 428 名前:nobodyさん mailto:sage [2008/02/15(金) 17:51:58 ID:???]
- 少しだけど、クラス分割のコツが掲載されてたのではっておきます。
VBプログラマ向けの情報だと、OOPの考え方の情報が結構ありそうです。 業務Webアプリの作り方の基礎(前編) 業務アプリ開発で失敗しないコツ www.atmarkit.co.jp/fdotnet/vblab/bizappbasic01/bizappbasic01_01.html > 1つの機能(=たとえWebアプリで複数のページにまたがっていたとしても一連の作業を > 完了させるまでの一連の操作)に対して、1つのビジネス・ロジック層のクラスを > 作ってみることをお勧めする。 > 一般的な業務アプリでは、クラスを細かくしすぎてしまうとどこで何を行っているのかが > 分かりづらくなり、結果的にメンテナンスしづらいアプリになることがある。 (パフォーマンスを考慮し、) > 可能な限りクラスのインスタンス化が必要ない静的メソッド(Sharedプロシージャ)で > 作成したステートレスな設計にすることをお勧めする。
- 429 名前:nobodyさん mailto:sage [2008/02/15(金) 20:19:56 ID:???]
- たまに昔のサイト触ったりすると非OOPなんてもうやってらんねーと思う
DRYになってないから直すの大変
- 430 名前:nobodyさん mailto:sage [2008/02/15(金) 22:23:07 ID:???]
- OOPってのは設計的な考え方ってのが含まれるんだけど、
そういう考え方は別として、単にコーディング技法として便利だよ。
- 431 名前:nobodyさん mailto:sage [2008/02/15(金) 22:36:39 ID:???]
- >>272
プリミティブだけど実装してみました・・ もはやQuickFormとSmartyがないと動きませんが・・ ttp://briefcase.yahoo.co.jp/bc/oopfw
- 432 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/15(金) 23:49:43 ID:???]
- 風邪をひいてしまい、最近頭が回らないです。レスも遅れてしまってます。。。
>>392 確かにそうですね。継承をして作ったクラスはすべてPostgreSQLに依存してしまいます ので、is-a関係が正しいですね。 >>407 接続に関して抽象的にクラスを定義するところは勉強になりました。 私はまだまだ継承を使いこなせてないですね。 >>410 > 接続オブジェクト(CDB_PostgreSQL)はCSearch_Personalクラス外部から与える。 この発想は思いつきませんでした。 確かに言われてみるとそうです。CSearch_Personalを一切修正しないで済むようになります。
- 433 名前:に ◆lKs5QMUHoA mailto:sage [2008/02/15(金) 23:50:26 ID:???]
- >>431
サンプルありがとうございます。 あとでソースを読んでみます。
- 434 名前:383 mailto:sage [2008/02/16(土) 00:15:26 ID:???]
- 質問しておきながら、反応かなり遅れてしまってごめんなさい。
具体的なコードやアドバイスを提示してくださった方々、ありがとう。 ちょっとまだ、自分には敷居が高くて色々大変そうですが、 考えるよりも産むが易し、と言うので、手を動かして色々試行錯誤してみます。 ありがとうございました。
- 435 名前:nobodyさん mailto:sage [2008/02/16(土) 11:47:29 ID:???]
- フレームワークの利点などの検証の参考となるかと思ったので書いておきます。
ASP.NETでは、「検証コントロール」というのが便利そうだ。 「プログラムを作成するたびにこういうのをいちいち書いたりしなくていい」という 部分の利便性は良く分かる。 ASP.NETで学ぶVisual Studio .NETの魅力 第2回 Visual Studio.NETでプログラム・レス開発を学ぶ(前編) www.atmarkit.co.jp/fdotnet/aspandvs/aspandvs02/aspandvs02_04.html だが、こういうのは逆にそのフレームワークに縛られてしまうのが欠点だな。 準備されてるコントロールを自分の意図するようにやりたいが、その方法が誰も分からない もしくは、出来ない場合は、それで終わりみたいな。 話はずれるが、Accessで開発してる時、各種コントロールやウィザードの組み合わせでは 対応出来ないと感じたのを思い出した。ウィザードが準備する通りの物が目的ならば良いのだが、 それにちょっと変更を加えたい場合はどうしたらよいのかという感じ。各種プロパティーの 値を変更してみても変な方向に変わっていくだけ。 自分の意図するようにカスタマイズしたい場合は、非連結のテキストボックスを貼り付けて VBAで制御するスタイルでやってたな。
- 436 名前:nobodyさん mailto:sage [2008/02/16(土) 12:59:37 ID:???]
- Accessではグリッドが無いけれど、サブフォームで代用する方法はある。
しかし、そのカスタマイズ度は低い。(確か、クリックしたセルの場所を 取るとか、一つのセルだけ色を変更するとかがかなり苦手だったような。) サブフォームで代用できない場合は、フォーム上にグリッドを貼り付けるような モジュールは無いので、DBへのアクセス手段が手軽なものを捨ててでも VBで0から作り直すのが一般的な選択方法となる。 Webアプリのフレームワークでもこのような状況になる事ってあるのかなぁ?
- 437 名前:383 mailto:sage [2008/02/16(土) 17:18:06 ID:???]
- PDOを継承する形でこんなクラスにしてみました。
突っ込みどころ満載だと思うんだけど、とりあえず、このコーディング方法はやめておいたほうがいい、 っていうところを教えていただけると嬉しいです。 class DBConnect(){ // メンバ変数にDB接続情報を記述 function __construct(){} // PDOをインスタンス化 function getConnID(){} // PDOオブジェクト格納変数を返す } class TableCtrl extends PDO{} //PDOを継承、汎用関数を定義してもOK. class CtrlA extends TableCtrl{ // テーブルAを操作する protected $ConnID; function __construct($ConnID){} //PDOオブジェクト格納変数を渡す }
- 438 名前:438 mailto:sage [2008/02/16(土) 17:21:28 ID:???]
- スクリプト先頭で、DBConnectをnewして、PDO格納オブジェクトを受け取ってから、
それを引数にCtrlAをnewする感じ……。 一応動きはするけど……全然ダメだな……。
- 439 名前:nobodyさん mailto:sage [2008/02/16(土) 17:46:45 ID:???]
- >>438
なんでもいいけど、既存のフレームワークがどうなっているか見てみろ。 見たら自分で作るきなくなるけどなw
- 440 名前:438 mailto:sage [2008/02/17(日) 16:53:21 ID:???]
- >>439
返信ありがとう。 まったくわかってないみたいなので、クラスの設計方法から学び直します。 実際の処理をする具象クラスを作って、また別に、それを統括するクラスを作っていく。 複数のクラスを設定によって使い分けしなきゃいけない場合は、抽象クラスなりインターフェイスなりを継承(後者の場合は実装)させて、 メソッド名を統一させた上で、ポリモーフィズム――クラスによって同名メソッドの振る舞いを変えさせるって解釈でいいよね?――で実現させる。 基本こんな感じかな? プリペアドステートメントに惹かれて、PDOを継承する形で作って見たんだけど、 DB接続関連の場合、接続IDを返してくるmysql_connect(); なんかのほうが、使いやすい気がする。 フレームワーク自作なんて、自分にとってはとんでもない話しですよ……。
- 441 名前:nobodyさん mailto:sage [2008/02/17(日) 19:14:54 ID:???]
- お前の下らない御託はいいから見ろっつの
- 442 名前:nobodyさん mailto:sage [2008/02/17(日) 20:01:12 ID:???]
- >>441
ごめん、無視してたわけじゃないんだ。 とりあえず、軽い「ちいたん」とやらを見てきます。 スレ汚し、ごめんなさい。自重します。
- 443 名前:nobodyさん mailto:sage [2008/02/17(日) 20:03:55 ID:???]
- なぜちいたんを選ぶか・・・
- 444 名前:nobodyさん mailto:sage [2008/02/17(日) 20:08:23 ID:???]
- ( ゚д゚)ポカーン
- 445 名前:nobodyさん mailto:sage [2008/02/17(日) 20:22:12 ID:???]
- 救いようが無いな。
- 446 名前:nobodyさん mailto:sage [2008/02/17(日) 21:40:51 ID:???]
- スレのレベルを下げちゃってごめんなさい……。
軽い「ちいたん」が入門にはちょうどいいかな、と思っての選択です。 いきなり、CakePHPなど大きいのを見ても、余計に混乱しそうだったので。 スレのレベルを余計に下げるだけなのでROMします。 度重なるスレ汚し、失礼しました。
- 447 名前:1 ◆SWtzLesEmM mailto:age [2008/02/17(日) 23:11:41 ID:???]
- >>324
>>335 掲示板スクリプトの改善、どうもありがとうございます。(*^^*)v ↓動作サンプルを設置しました。 ssurl.net/n777 ssurl.net/ioah
- 448 名前:nobodyさん mailto:age [2008/02/22(金) 09:37:11 ID:???]
- フレームワークをみてみろとアドバイスをしてくださってる方は、
もう少し具体的なアドバイスを出して欲しい。 具体的に、どんなフレームワークの構造を見て、どんなことを 学んだのかなどをあわせて出してくれたら、勉強もしやすいと 思うのですが。
- 449 名前:nobodyさん mailto:sage [2008/02/22(金) 09:52:27 ID:???]
- お前は人に逐一指示されないと何にもできないんだな
- 450 名前:nobodyさん mailto:sage [2008/02/22(金) 09:59:49 ID:???]
- フレームワークはどこに行けば手に入りますか?
- 451 名前:nobodyさん mailto:sage [2008/02/22(金) 11:02:18 ID:???]
- >>449
漠然としすぎていて良く分からないのである程度は具体例が 欲しいという意味なのですが。 >>450 こちらへどうぞ 【PHP】フレームワークについて語るスレ10【総合】 pc11.2ch.net/test/read.cgi/php/1202521438/l50
- 452 名前:nobodyさん mailto:sage [2008/02/22(金) 11:21:05 ID:???]
- >>451
そのくらい自分で探せよという意味なのですが
- 453 名前:nobodyさん mailto:sage [2008/02/22(金) 11:36:33 ID:???]
- >>451
自分でDBの抽象化を考えてみて、クラスの定義だけでも書いてみろ。 その後にZFのZend_DBを見て、自分のとどう違うか、なぜそうなっているのかを考えろ。 それから、偉そうな態度で教えてもらおうと思うな。
- 454 名前:nobodyさん mailto:sage [2008/02/22(金) 11:50:38 ID:???]
- 別に偉そうじゃないだろ。
むしろお前のほうが偉そうだ。 何被害妄想してるんだw
- 455 名前:nobodyさん mailto:sage [2008/02/22(金) 12:50:26 ID:???]
- 本気でOOP勉強したい人はまずPHP止めないと・・
PHPの世界にOOPの参考になるものがどれほどある? javaやらずOOP出来ましたってありえないでしょ。
- 456 名前:nobodyさん mailto:sage [2008/02/22(金) 12:58:24 ID:???]
- >>455
OOP勉強するなら、SmallTalkだな。 Javaとかアフォ?w
- 457 名前:nobodyさん mailto:sage [2008/02/22(金) 13:04:24 ID:???]
- 本気でOOP勉強する為にPHPをやめる必要は無い。
PHP使いながら、OOP勉強すればいいだけ。 本気でOOP勉強をするなら、非実用的な言語も含めていろいろな 言語を使うことになる。そしてそれらが実用的かというと別の問題。 いくらsmalltalkでOOPをマスターしました!とかいっても それでウェブサービスを作ることはまずありえないんだから 手段と目的を逆にしないようにね。
- 458 名前:nobodyさん mailto:age [2008/02/22(金) 13:04:45 ID:???]
- その論争は、きりが無いから、マ板とかのOOPのスレでやって欲しい。
「スクリプトの世界ならRubyだろ。」とか、結論が見えてこないし、 このスレの趣旨とは違うと思う。
- 459 名前:nobodyさん mailto:age [2008/02/22(金) 13:06:38 ID:???]
- >>457は非常にすばらしいことを言ったと思う。
- 460 名前:nobodyさん mailto:sage [2008/02/22(金) 13:13:27 ID:???]
- 確かにPHPでOOPの解説をしている情報は非常に少ないので、
勉強の際はjavaやC#などの情報を読みながらやることになると思う。 しかし、PHPを辞めるまでする必要性は無いと思う。 言いたいのは「OOPの勉強するのなら、PHPに限定してはいけないよ。」 じゃないの?
- 461 名前:nobodyさん mailto:sage [2008/02/22(金) 13:16:21 ID:???]
- 本気で勉強する為にPHPをやめた。
そしてOOPをマスターした。 しかし、Javaでは共有サーバーで動くソフトを作れなかった。 多くのオープンソースアプリはPHP製だった。 OOPをマスターしたが、何も出来なくなった。 完。
- 462 名前:nobodyさん mailto:sage [2008/02/22(金) 13:27:17 ID:???]
- 前から思ってたんだが、頭の悪い人間が粘着してるな。
自分がどんな風に思われてるかも分かってないんだろうなw
- 463 名前:nobodyさん mailto:sage [2008/02/22(金) 13:58:48 ID:???]
- >>457
> いくらsmalltalkでOOPをマスターしました!とかいっても > それでウェブサービスを作ることはまずありえないんだから 今やウエブサービスに欠かせないMVCはそもそもsmalltalkのOOP由来なんだが…。 継続ベースだって覚えておいて損はない。 www.ibm.com/developerworks/opensource/library/os-lightweight8/ www.ibm.com/developerworks/jp/java/library/j-cb07056/index.html
- 464 名前:nobodyさん mailto:sage [2008/02/22(金) 14:19:47 ID:???]
- PHPでOOPする為に別の言語でOOPの勉強をする。
自分の為に必要だからやるだけ。
- 465 名前:nobodyさん mailto:sage [2008/02/22(金) 14:42:14 ID:???]
- >>463
うん。だからさ勉強・研究の為の言語と 実用・開発の為の言語は別なの。
- 466 名前:nobodyさん mailto:sage [2008/02/22(金) 17:56:13 ID:???]
- このソースの解析をがんばればいろいろ見えてくるだろうけど、
一人じゃ到底無理だろうな。別スレでも立てて、解析して ドキュメント作ろう!見たいなことやってみる? Visual Studio 2008で見る.NET Frameworkのソースコード www.atmarkit.co.jp/fdotnet/insiderseye/20080222sourcecode/sourcecode.html > 公開されたソースコードには(もちろん英語だが)多くのコメントが入っており、 > ローカル変数名も元のままの“生”のソースコードである。 > そしてそれがVisual Studio 2008でシームレスにトレースできるようになる
- 467 名前:nobodyさん mailto:sage [2008/02/23(土) 08:39:50 ID:???]
- >>447
サンプル見たけど Viewで変数が入らないとこで”を使ってる意味がわからない ”と’の使い方間違ってると思う 面倒な使いわけするならsprintfという手もある パラメータ変数が渡ってくる switch文のcaseに頭文字を大文字にしてる意味がわからない
- 468 名前:nobodyさん mailto:sage [2008/02/23(土) 08:44:08 ID:???]
- function html_head(){
echo "<html>"; echo "<head><title>BBS</title></head>"; echo "<body>"; } 上は、こうでいいやん! function html_head(){ echo '<html>'; echo '<head><title>BBS</title></head>'; echo '<body>'; } なんでダブルクォートやねん
- 469 名前:nobodyさん mailto:sage [2008/02/23(土) 09:12:10 ID:???]
- >>447
class View_Baseは helper的な役割だからいいとしても View_List View_WriteFinish コントローラで判断させるべき機能が Viewで書かれてるし テンプレート化されてないのもあって ぐちゃぐちゃですね。 ここがOOP構造を理解しにくい作りになってる コントローラは面倒でもOOP理解するには必要だ 理解しやすくするためにテンプレート化も必要
- 470 名前:nobodyさん mailto:sage [2008/02/23(土) 09:19:29 ID:???]
- >>447
本来コントローラとModelがやりとりする部分が コントローラが無いために Viewで処理されてる MVモデルですね! OOP構造化理解のためには 面倒でもMVCモデルじゃないと 初心者を間違った方向に導きますよ!!
- 471 名前:nobodyさん mailto:sage [2008/02/23(土) 12:22:21 ID:???]
- >>469
具体的にどうすればいいの? 条件分岐してないから切り分けは良さげに見えたんだが。 viewは機能ごとの静的HTML吐くのとは違うの?
- 472 名前:nobodyさん [2008/02/23(土) 13:43:29 ID:i4AYcehM]
- www.microsoft.com/japan/msdn/practices/type/Patterns/enterprise/DesMVC.aspx
これの アクティブモデルは、コントローラとは関係なくモデルで状態が変更される場合に使用されます。 これは別のソースでデータが変更され、この変更をビューに反映する必要がある場合に起こります。 株価相場表示を例に考えてみます。株価データが変更された場合、外部ソースからデータを受け取り、チッカーバンドや警告ウィンドウなどのビューを更新する必要があります。 モデルの内部状態の変更が検知できるのはモデルだけなので、モデルからビューに表示を更新するよう通知する必要があります。 って、hoge.php?param1=aaa¶m2=iiiみたいなリクエストを解析してコントローラがそれに応じたビューを選択して云々 ではなくて、例えばブログだったら記事テーブルにまだ一つもデータが無いときは「まだ記事が登録されていません」のビューをモデルが選ぶ、ってことかい? だとしたらどうやって実装したらいいんだろ・・・ そのモデルを使用するビューをモデルに登録しておいて、モデルのデータによって分岐させて使うビューを選択。そのときにビューは出力に必要なデータをモデルからひっぱりだす MSDNは書き方がやたらめんどいぜ
- 473 名前:nobodyさん [2008/02/23(土) 13:56:50 ID:i4AYcehM]
- コントローラがリクエスト解析
↓ そのリクエストにおいて必要なモデルのインスタンス生成 ↓ モデルのメソッド呼び出す ↓ 選択したビューのupdate呼びだして出力に必要な変数定義 ↓ モデルがビューの出力するメソッドを呼ぶ ビューはモデルからの変更を受け付けるupdateメソッドと出力するためのputHtmlメソッド持つインターフェイスを実装する なんか間違ってますか>< 教えてください!><
- 474 名前:nobodyさん mailto:sage [2008/02/23(土) 14:42:12 ID:???]
- なんですでにあるフレームワークを参考にしない?
- 475 名前:474 mailto:sage [2008/02/23(土) 14:43:18 ID:???]
- 474は無視してくれ
- 476 名前:474 mailto:sage [2008/02/23(土) 15:11:03 ID:???]
- >>472
それはようするに、株価データのようにユーザーが ページを更新しなくてもデータが更新されるときの話。 コントローラがモデルからデータ引っ張ってきて そのデータをビューに渡して表示という処理は変わらない。 ↑この処理を、普通は「URLを開いた」というタイミングで行っているわけ。 しかし、そのタイミングだと株価データ表示のようなリアルタイムでの表示は難しい 人間がF5を押す必要がある。この場合も更新されているとは限らず無駄に負荷が高くなる。 それを(ウェブアプリ以外では)モデルからデータが変更されたよーと コントローラ・ビューに通知し、その通知が来たタイミングでコントローラ・ビューが モデルからデータを引っ張ってきて(ry)という設計方法がある。 それが>>472で言っていること。 モデルに対して、コントローラやビューを「変更あったら俺に通知してくれ」 登録することでそれを実現する。 (データに変更があったらコントローラ・ビューのこの関数を呼び出してくれとモデルに登録する) でも、この設計。モデル(つまりサーバー)から変更の通知をすることになるので ウェブアプリでは一工夫必要になる。結局は、JavaScriptを使って 一定ごとに変更チェックをすることになるわけだが、まあそれをAjaxとかの技術で 非同期的にバックグラウンドで行うことにより、見た目上はサーバーから 変更通知がくるような感じに出来るんでしょ?やったこと無いけど。 その通知を元に、画面の一部、もしくはすべてを再描画する。 あとは詳しい人に任せた。
- 477 名前:nobodyさん [2008/02/23(土) 17:10:06 ID:i4AYcehM]
- >>476
レスd オブザーバパターンはWebアプリに不向きなのかー。 じゃあ、 //コントローラの実行メソッド public function doExecute(){ if($this->model->getArticleNum() === 0){ $message = '記事がまだ一つもありません'; require_once('./template/Error.php'); }else{ $this->view->putHtml(); } } こういう、コントローラがモデルからデータ引っ張ってきて分岐して、ビューを選択する、ってのはアリなのかな? ちょっとCakePHPとかの資料ググってくるは
- 478 名前:nobodyさん mailto:sage [2008/02/23(土) 17:50:55 ID:???]
- そういう場合Comet使うんじゃね?
Cometすげえ!って大騒ぎになってたころ資料見ても俺には何がなんだか理解できなかったけど
- 479 名前:nobodyさん mailto:sage [2008/02/23(土) 20:15:50 ID:???]
- 1を含めてコントローラの役割が全然わかってないんだよ!
MVモデルになってるんだよ! CakePHP、symfonyのソースをよく解読してみろよ! 1のサンプルにはVIEWにコントローラで処理するコードかいてあるんだぜ!
- 480 名前:nobodyさん mailto:sage [2008/02/23(土) 20:21:31 ID:???]
- PHPでOOPを追求すると
結局はMVCモデルのフレームワークにテーマが行き着くんだよね だったらPHPフレームワークのスレと同じじゃんて感じで ここでOOPを議論するときは MVCモデル以外を議論の対象にしたいよ
- 481 名前:nobodyさん mailto:sage [2008/02/23(土) 20:27:22 ID:???]
- >>478
ワロタ。目からうろこw httpってのはクライアント(ブラウザ側)から聞くことしかできないんだ。 どうやってもサーバーから話しかけることはできない。 だから、たとえば一分おきに、 「データ変わったかい?」「変わってねーよ」 「データ変わったかい?」「変わってねーよ」 「データ変わったかい?」「変わってねーよ」 「データ変わったかい?」「変わってねーよ」 「データ変わったかい?」「変わったよ!」 って聞かないといけない。たとえ4分半の時点でデータが変わっていても 5分後に聞くまでわからない。Cometというのは、 「データ変わったかい?」・・・・・・・・・・・(4分30秒後)「変わったよ!」・・・(数分後)「また変わったよ!」 とこうなる。 本質的にはクライアントから聞いているわけだが、変更があるまで みのもんたみたいにずっと溜めてから返答するため、 負荷の軽減とリアルタイムな通知が実現できるというわけ。 しかし、いまさらだけどhttpで無茶やりすぎだw
- 482 名前:nobodyさん mailto:sage [2008/02/23(土) 20:30:12 ID:???]
- 例え巧すぎワロタ
- 483 名前:nobodyさん mailto:sage [2008/02/23(土) 20:32:35 ID:???]
- >>479
だから具体的にどこがだよ?
- 484 名前:nobodyさん mailto:sage [2008/02/23(土) 20:35:35 ID:???]
- >>480
> PHPでOOPを追求すると > 結局はMVCモデルのフレームワークにテーマが行き着くんだよね それはPHPに限らず。 そもそもOOPが一番よく使われるのは、フレームワーク部分なんだよ。 OOPはフレームワークを作るときに使うものといっても過言じゃない。 通常のビジネスロジック部分は基本的に単純な命令の集まりになるので OOPを使っているという感じは無くなる。
- 485 名前:nobodyさん mailto:sage [2008/02/23(土) 20:43:56 ID:???]
- >>484
だから結局フレームワークの議論になるんなら このスレの意味が無いんだよ
- 486 名前:nobodyさん mailto:sage [2008/02/23(土) 20:45:46 ID:???]
- >>483
>>469
- 487 名前:nobodyさん mailto:sage [2008/02/23(土) 20:49:01 ID:???]
- >>485
フレームワークスレは、フレームワークの比較などを話すスレ OOPはフレームワークを題材に、OOPの話をするスレ おk?
- 488 名前:nobodyさん mailto:sage [2008/02/23(土) 20:53:31 ID:???]
- >>486
class View_List extends View_Base{ // function Write_HTML_head(){ $this->html_head(); $this->html_title("--- PHP で OOP の BBS ---"); echo "<hr>"; } // 書き込みフォームを表示させる。 function Write_HTML_form(){ $this->html_form_start("index.php"); echo "<b>[メッセージを投稿する]</b><br>"; $this->html_input_hidden("PAGE", "Write"); echo "タイトル:<br>"; $this->html_input_text("title"); echo "<br>"; echo "メッセージ:<br>"; $this->html_textarea("msg"); echo "<br>"; $this->html_submit(" 書き込む "); $this->html_form_end(); }
- 489 名前:nobodyさん mailto:sage [2008/02/23(土) 20:54:28 ID:???]
- //
function Write_HTML_foot(){ $this->html_foot(); } // function Write_HTML_data($line){ echo "<b>タイトル:</b>"; echo $line->GetName(); echo "<br>"; echo "<b>メッセージ:</b>"; echo $line->GetMsg(); echo "<hr>"; } } この中のどこがコントローラで判断させるべき処理なんだ?
- 490 名前:nobodyさん mailto:sage [2008/02/23(土) 20:57:01 ID:???]
- >>487
OOPはフレームワークを題材に、OOPの話をするスレならプログラム板だろ? 初心者だらけの、ここよりも良レスが来ると思うんだが PHPにこだわる理由がわからない WEBでのフレームワークならどれも仕組みは同じだろうに じゃあperlでOOP、rubyでOOPていうスレが無いのは何でなんだ?
- 491 名前:nobodyさん mailto:sage [2008/02/23(土) 21:21:33 ID:???]
- function GetNextData(){
if( $line = fgets($this->m_file_hd, 1024) ){ $line2 = split($this->m_pause_chr, $line); $ans = new Line(); $ans->SetData($line2[0], $line2[1]); }else{ $ans = ""; } return $ans; } これは下記がいいだろ? function GetNextData(){ $ans = ""; if( $line = fgets($this->m_file_hd, 1024) ){ $line2 = split($this->m_pause_chr, $line); $ans = new Line(); $ans->SetData($line2[0], $line2[1]); } return $ans; }
- 492 名前:nobodyさん mailto:sage [2008/02/23(土) 21:36:01 ID:???]
- // データを1行読み出す。
function GetNextData(){ if( $line = fgets($this->m_file_hd, 1024) ){ $line2 = split($this->m_pause_chr, $line); $ans = new Line(); $ans->SetData($line2[0], $line2[1]); }else{ $ans = ""; } return $ans; } 変数名の最後に数字使うのは初心者だろ? もしコード拡張で数値計算が入ったら紛らわしい
- 493 名前:nobodyさん mailto:sage [2008/02/23(土) 21:39:32 ID:???]
- // データを最後に追記する。
function AddLast($title, $msg){ // ファイルを開く $hd = fopen($this->m_file_name , "a"); // データを書き込む $line = $title . $this->m_pause_chr . $msg . "\n"; fwrite($hd, $line); // ファイルを閉じる fclose($hd); } なんでflock入れないの?
- 494 名前:nobodyさん mailto:sage [2008/02/23(土) 21:47:30 ID:???]
- $line2 = split($this->m_pause_chr, $line);
はこれの方がわかりやすいだろ? list($name,$msg) = split($this->m_pause_chr, $line);
- 495 名前:nobodyさん mailto:sage [2008/02/23(土) 21:52:46 ID:???]
- function GetNextData(){
if( $line = fgets($this->m_file_hd, 1024) ){ $line2 = split($this->m_pause_chr, $line); $ans = new Line(); $ans->SetData($line2[0], $line2[1]); }else{ $ans = ""; } return $ans; } これは下記に修正した方がわかりやすいよ function GetNextData(){ $ans = ""; if( $line = fgets($this->m_file_hd, 1024) ){ list($name,$msg) = split($this->m_pause_chr, $line); $ans = new Line(); $ans->SetData($name, $msg); } return $ans; }
- 496 名前:nobodyさん mailto:sage [2008/02/23(土) 21:55:49 ID:???]
- 変数にオブジェクトが入ってくるなら
初期化はこうだった function GetNextData(){ $ans = null; if( $line = fgets($this->m_file_hd, 1024) ){ list($name,$msg) = split($this->m_pause_chr, $line); $ans = new Line(); $ans->SetData($name, $msg); } return $ans; }
- 497 名前:nobodyさん mailto:sage [2008/02/23(土) 22:04:10 ID:???]
- else{
$ans = ""; } これ全部 $ans = null; に初期化に変えて elseとっぱらった方がいいよ 返り値はオブジェクトが入ってるか入ってないかという処理なのに 空文字を返すのよくないよ!
- 498 名前:nobodyさん mailto:sage [2008/02/23(土) 22:44:30 ID:???]
- まぁ空文字もnullも演算子によっては同様にfalse扱いできるという点がPHPの特徴なわけで
- 499 名前:nobodyさん mailto:sage [2008/02/24(日) 05:50:47 ID:???]
- >>490
> じゃあperlでOOP、rubyでOOPていうスレが無いのは何でなんだ? 人気が無い言語だからw
- 500 名前:nobodyさん mailto:sage [2008/02/24(日) 11:09:06 ID:???]
- プログラム初心者がPHPだけでOOPを習得するのはほぼ不可能に近いと思う。
OOP習得が目的ならあまりにも無謀だし、全くもって得策ではない。 フレームワークとか利用しても、ユーザが$_POSTとか直接呼べちゃうと 結局OOPの意味が無いんではないだろうか?むしろそれが出来てしまうPHPは OOP理解には全く向いていない言語だとも思うのだ。 でも不完全ながら、PHPでOOPっぽくコーディングすること自体は楽しいと思う。
- 501 名前:nobodyさん mailto:sage [2008/02/24(日) 11:31:24 ID:???]
- >>500
> プログラム初心者がPHPだけでOOPを習得するのはほぼ不可能に近いと思う。 どんな言語でも当たり前。 > フレームワークとか利用しても、ユーザが$_POSTとか直接呼べちゃうと > 結局OOPの意味が無いんではないだろうか? まったく関係ない。
- 502 名前:nobodyさん mailto:sage [2008/02/24(日) 14:04:04 ID:???]
- PHPでOOPするには
初心者じゃ無理だよ オブジェクトの設計は上手に出来ても コーディングレベルで初心者ならではのミスが目立つ
- 503 名前:nobodyさん mailto:sage [2008/02/24(日) 14:08:38 ID:???]
- PHPでOOP勉強は適してないよ
JAVA,C#,rubyみたいに OOPを前提として作られた言語じゃないからね
- 504 名前:nobodyさん mailto:sage [2008/02/24(日) 15:14:16 ID:???]
- 「PHPでOOPは」みたいな話は何度も出てるのに、いつも具体的な話にならないのは何で?
- 505 名前:nobodyさん mailto:sage [2008/02/24(日) 15:31:22 ID:???]
- お前に知識がないから
- 506 名前:nobodyさん mailto:sage [2008/02/24(日) 15:37:16 ID:???]
- ( ´・∀・`)へー
- 507 名前:nobodyさん mailto:sage [2008/02/24(日) 15:38:42 ID:???]
- 関係なくはないよ。グローバル変数として、どこからでも呼べちゃうんだから、カプセル化できてないってことになる。
だいたい$_REQUESTや$_SESSIONがオブジェクトじゃなくって、変数な時点で、PHPのウェブアプリでオブジェクトなんて使うなっていう、PHP開発者からのメッセージと理解すべき。
- 508 名前:nobodyさん mailto:sage [2008/02/24(日) 15:44:11 ID:???]
- グローバル変数が使えたら、カプセル化できない言語ってことになるのか。
そりゃすごい。
- 509 名前:nobodyさん mailto:sage [2008/02/24(日) 16:03:09 ID:???]
- 俺も、>>469に書いてる、コントローラで判断させるべき処理の具体的な
コードを教えて欲しい。 このコードの話が質問されても出ていないのはなぜ?フレームワークを 使わないと、理論を完全に実現できないとかそういう話だから?
- 510 名前:nobodyさん mailto:sage [2008/02/24(日) 16:19:48 ID:???]
- >>479=486も結局答えられてないしな。
だめだだめだと言うものの、何故だめなのか、どう書けばいいのかということには答えられない低レベル批判厨なのさ
- 511 名前:nobodyさん mailto:sage [2008/02/24(日) 19:08:42 ID:???]
- また見えなくすることをカプセル化と勘違いしてる高レベルプログラマさんのお出ましだ
- 512 名前:1 ◆SWtzLesEmM mailto:age [2008/02/24(日) 19:49:37 ID:???]
- >>1 ◆SWtzLesEmM :2007/02/23(金) 13:35:52
このスレも1周年を迎えてましたね! …時間が経つのは早いなー。>< 1年前からあまり進歩してないのは気のせい?(・∀・)
- 513 名前:1 ◆SWtzLesEmM mailto:age [2008/02/24(日) 19:50:55 ID:???]
- >>487
PHPでOOPを勉強するとき、フレームワークは良い見本になりますね! >>490 >PHPにこだわる理由がわからない ホームページ作成でPHPの勉強を始めました。 プログラミングの勉強をしていたら、手続き型以外にOOPという方法があることを知り、使えるようになりたいと思いました。 >>502 Zendが積極的に音頭を取って、初心者向けの情報提供をやってくれたらいいですね。>< www.zend.co.jp/tech/ Zendの代わりに、PHPプロというサイトがPHP初心者のニーズをカバーしてくれているでしょうか?(・∀・) www.phppro.jp/ >>503 Javaもちょっと勉強してみました。^^ …今使っているレンタルサーバだとJavaが動かない>< >>507 自分で作ったクラスに関しては、クラス内に変数を封じ込めておけるので、スコープ(変数が操作できる領域)をコントロールできるのではないでしょうか? PHPが最初から用意してくれているグローバル変数($_REQUES等T)のデメリットがよく分からないのですが、いつでもアクセスできるのでこれはこれで便利だと思います。 とりあえず、PHPでOOPが使えるようになりたいです。 PHP以外の言語も使ってみて、必要に応じて使い分けができるようになれればイイですね!(´∀`)
- 514 名前:1 ◆SWtzLesEmM mailto:age [2008/02/24(日) 20:01:23 ID:???]
- フレームワークに関して情報提供どうもありがとうございます。
>>479 MVモデル…(ノ∀`) アチャー 以前作った掲示板を、MVCフレームワークの形で作り直してみました。(^^)v ↓ ssurl.net/ryol
- 515 名前:nobodyさん mailto:sage [2008/02/24(日) 20:34:16 ID:???]
- 結局1のやりたいことは
アマゾンのアフィリエイトの誘導らしいwww
- 516 名前:1 ◆SWtzLesEmM mailto:age [2008/02/24(日) 22:49:51 ID:???]
- >>515
PukiWikiPlusでamazonプラグインをデフォルトのまま使うと、プラグイン作者さん?のアフィリエイトコードが付くようですね。>< ttp://cafelounge.net/dev/?PukiWiki%20Plus!%2FPlng-in%20Customize#a5aa9e2a >amazonアカウントを設定します。 >define('AMAZON_AID','mikoscafeterr-22'); アフィリエイトはやってませんが、とりあえず本の情報をまとめるのに便利なのでamazonプラグインを使ってみます。^^
- 517 名前:nobodyさん mailto:sage [2008/02/25(月) 07:27:51 ID:???]
- >>516
本の情報とかいらんよ あと、valueclickのアフィリエイトも出てるし あとTOPページいくとgoogle広告も出てる 結局こういうことかいな 最悪やなお前
- 518 名前:nobodyさん mailto:sage [2008/02/25(月) 11:09:54 ID:???]
- 具体的な本の紹介をサイトに掲載することは俺は賛成だけどな。
でも、単に羅列してるだけよりも、読んでみてどう思ったのかという レビューをだして、その人なりの評価を出して欲しいとは思った。 羅列しているだけだと、そのサイト特有の色を感じない。
- 519 名前:nobodyさん mailto:sage [2008/02/25(月) 11:36:58 ID:???]
- どう考えても本の紹介を書くのおかしいだろう?
ここだけじゃないけど 技術的なサイトに広告とかマジうざい!!!!
- 520 名前:nobodyさん mailto:sage [2008/02/25(月) 11:41:53 ID:???]
- 「OOPやるのならば、PHPを辞めた方がいい」といっている人は、
それをいいたいのならば、もっと具体的に言って欲しい。 「RubyはもともとOOPとして設計されている」とか抽象論で終わってるから 何も話が進まず、同じことの繰り返しが続いているんだと思う。 「$_POSTなど、グローバル変数があるからオブジェクト指向的な考えには ならない」とかそういう話をしてもらえれば、勉強する人はそれを それぞれに解釈して学んでいけるのではと思う。 「じゃ、辞めようか」と思う人もいれば、「じゃ、その部分だけ気を つけていけばPHPでもOOPがやれるんだな」と思う人もいるわけで。
- 521 名前:nobodyさん mailto:sage [2008/02/25(月) 11:44:37 ID:???]
- 1は誤解を招くことは面倒だからやめた方がいいよ
- 522 名前:nobodyさん mailto:sage [2008/02/25(月) 11:44:58 ID:???]
- >>519
そこまでいいきるのなら、じゃ、みなけりゃいいじゃんとか思うけどな。 あからさまなCMじゃなければいいと思うけどな。俺はこの本をつかって こういう勉強をして、こういう役に立ったとか、いいじゃん。 このスレは勉強しようっていうスレなんだから。
- 523 名前:nobodyさん mailto:sage [2008/02/25(月) 11:46:05 ID:???]
- >>521
それにおいては俺も同意だな。
- 524 名前:nobodyさん mailto:sage [2008/02/25(月) 11:47:54 ID:???]
- 特に2ちゃんはスレ利用して
最終的に宣伝目的にするやつが多いからな リンク先に広告があるかどうかだけはシビアに見てる奴が多いよ
- 525 名前:nobodyさん mailto:sage [2008/02/25(月) 11:51:48 ID:???]
- 100歩譲って本を紹介しても、それは構わないけど
それがアフィリエイトになってるのがおかしいよ
- 526 名前:nobodyさん mailto:sage [2008/02/25(月) 11:54:29 ID:???]
- 以前、面白いレスを自分のサイトに集めて、面白かったと思う
投稿も受け付けたりしていて、そのサイトに広告を出して儲けてた 人がいて、叩かれたことがあったからな。 あと、のまねこ。 そういう事件があったから、2ちゃんねるをつかって管理者が 儲けようとする目的で広告が掲載されていることにはぴりぴりと している傾向はあると思うな。 2ちゃんねるを通じて何か企画をするのには賛成だけど、やるのなら GPLライセンスでやるみたいな意識でやらないとだめなんじゃないかな。
- 527 名前:nobodyさん mailto:sage [2008/02/25(月) 11:59:06 ID:???]
- 書籍の紹介は良いと思う。そうしないと、@ITの紹介もだめになるわけで、
本当に内容の無いことしかかけなくなってしまう。 情報をまとめていることで、便利だというものもあるしね。 だけど、「アフィリエイトはダメだ」という意見には賛成だ。
- 528 名前:nobodyさん mailto:sage [2008/02/25(月) 12:02:29 ID:???]
- 1がアフィリエイトするのは構わないけど
2ちゃんを利用するというのが問題あり
- 529 名前:nobodyさん mailto:sage [2008/02/25(月) 12:06:47 ID:???]
- 2ちゃんねるのスレのまとめサイトであるにもかかわらず、
アフィリエイトされていると、それがどこかで告知されて、 大きく騒がれると思う。このスレに厨を沢山呼ぶことにも なりかねない。 記念パピコとかが大量に来るので、1は早急にアフィリエイトは 辞めるべきだと思う。
- 530 名前:nobodyさん mailto:sage [2008/02/25(月) 12:07:12 ID:???]
- 嫌いだと思う事と否定すべき事は分けるものだと思うが、ここでのOOPの議論を見れば
それができないのも仕方がない。
- 531 名前:nobodyさん mailto:sage [2008/02/25(月) 12:08:30 ID:???]
- >>530
kwsk
- 532 名前:nobodyさん mailto:sage [2008/02/25(月) 12:34:45 ID:???]
- 2ちゃん利用して金儲けはよくないし
まとめサイトで書籍紹介するのも始めてみて正直びびった
- 533 名前:1 ◆SWtzLesEmM mailto:age [2008/02/25(月) 12:50:47 ID:???]
- ご意見どうもありがとうございます。もう少しPHPでOOPの勉強を続けてみます。
>>517 2chでソースコードを投稿(>>36-50)したら、>>53さんが「わかりにくいからWebサイトにまとめてくれ。」とアドバイスしてくれました。 とりあえず、無料サーバ(XREA)にまとめサイトを設置しましたが、XREAは広告を表示するようになっているので仕方ないですね。 ttp://www.xrea.com/?action=ad >当サイトは、無料運営のため、広告コードを自分で挿入する、または、自動的に挿入して頂く必要があります。 >>521 アドバイスどうもありがとうございます。 PukiWikiPlusのamazonプラグインに付いていたプラグイン作者さん?のアフィリエイトコードは外しました。 >>526 CGM型のサイトを運営して収益が出る場合、運営者だけが利益を得て、参加者に利益が還元されないと、不公平=不満に感じる人もいるかもしれませんね。 このまとめサイトは、ソースコード置き場+自分のメモという感じで使っていますが、利益が出せるでしょうか? 営利目的の企画として行なうなら、企業や出版社等に運営してもらった方が、本格的になっていいかもしれませんね。(^^; …どこかで「PHPでOOP」講座を作ってもらえないでしょうか?>PHPプロさんとか? >>527 勉強するとき、本を読む人っていますよね? 本は読まない人もいると思いますが、本の情報も調べたのでついでにまとめました。
- 534 名前:nobodyさん mailto:sage [2008/02/25(月) 12:58:27 ID:???]
- 1の目的がよくわらん。
1がコテハン使ってスレをリードするのおかしいやろ? まとめサイトも1が作るのちゃうやろ 名無しがやることやろ
- 535 名前:nobodyさん mailto:sage [2008/02/25(月) 13:00:22 ID:???]
- 1がスレをリードせんといて
長くレスが続くなら それは本当に需要のあるスレであって 1が作り上げたスレになってるやん
- 536 名前:nobodyさん mailto:sage [2008/02/25(月) 13:14:26 ID:???]
- >>533
1(個人)に利益が出てたら、必ず騒ぐ人が出てくる。 しかし、利益が出てなければ、その旨を断っておけば、 騒いでいる意見は無視しておけば、しばらくすれば蒸発 すると思う。
- 537 名前:nobodyさん mailto:sage [2008/02/25(月) 13:18:05 ID:???]
- >>534
俺は1ではないが。 > 1の目的がよくわらん。 スレタイの通り。PHPでOOPを勉強する。 > 1がコテハン使ってスレをリードするのおかしいやろ? 何がおかしいのかがわからん。 こうあるべきだとかいうガイドラインでもあるわけ? > まとめサイトも1が作るのちゃうやろ > 名無しがやることやろ お前のローカルルールを押し付けるな。 1がまとめサイトやめたら変わりにお前がやるのか?
- 538 名前:nobodyさん mailto:sage [2008/02/25(月) 13:21:26 ID:???]
- >>535
お前のやりたいことの方が分からん。 変な哲学押し付けるな。
- 539 名前:nobodyさん mailto:sage [2008/02/25(月) 13:27:10 ID:???]
- スレ主がまとめサイト作ってるスレてあるの?
広告目的以外に見たことないんだけどwww
- 540 名前:nobodyさん mailto:sage [2008/02/25(月) 13:30:31 ID:???]
- なんで事例が必要なの?
- 541 名前:nobodyさん mailto:sage [2008/02/25(月) 13:35:02 ID:???]
- >>539
だったら君が利用しなきゃいいだけでは?
- 542 名前:nobodyさん mailto:sage [2008/02/25(月) 13:35:25 ID:???]
- WebProg板で
スレ主がまとめサイト作ってるスレどこにあるんだよ?
- 543 名前:nobodyさん mailto:sage [2008/02/25(月) 13:36:07 ID:???]
- 2ちゃんにふさわしくない行動は見て見ぬふりは出来んよ
- 544 名前:nobodyさん mailto:sage [2008/02/25(月) 13:39:24 ID:???]
- 1は需要のないスレを無理に上げるのやめて欲しいよ
自分の存在を認められたいだけのオナニスレだよ
- 545 名前:nobodyさん mailto:sage [2008/02/25(月) 13:44:21 ID:???]
- アフィリエイト見てオナニスレてことに確信がもてたよ
このスレは1の自己満足以外に何も生まれないよ結果としてね
- 546 名前:nobodyさん [2008/02/25(月) 13:45:42 ID:nYfgU4lL]
- >>543-544
何で君はスルーができないの? 誰も書き込まなければそのまま消えていくんじゃないの?
- 547 名前:nobodyさん mailto:sage [2008/02/25(月) 13:46:57 ID:???]
- コテハン使って自慢げにソースコード公開するやつは
よほど腕に自信がある奴か 初心者相手に自己満足したい奴かのどっちか
- 548 名前:nobodyさん mailto:sage [2008/02/25(月) 13:47:30 ID:???]
- >>545
君の語りを見てオナニレスてことに確信がもてたよ これらのレスは君の自己満足以外に何も生まれないよ結果としてね
- 549 名前:nobodyさん mailto:sage [2008/02/25(月) 13:49:30 ID:???]
- >>547
ああ、そうか。だったら君はもう来るな。
- 550 名前:nobodyさん mailto:sage [2008/02/25(月) 13:52:02 ID:???]
- 1が名無しとなって言い訳してるくさいな
- 551 名前:nobodyさん mailto:sage [2008/02/25(月) 13:54:58 ID:???]
- >>550
俺は1じゃないんだけどな。言い返せなくてそれしかいえないんだな。 それにお前がここに常駐する意味はないよな。
- 552 名前:nobodyさん mailto:sage [2008/02/25(月) 13:58:28 ID:???]
- 記念パピコ
- 553 名前:nobodyさん mailto:sage [2008/02/25(月) 14:52:48 ID:???]
- コマツも軍需だよね
- 554 名前:nobodyさん mailto:sage [2008/02/25(月) 17:26:59 ID:???]
- さ あ 、 も り あ が っ
て ま い り ま し た
- 555 名前:nobodyさん mailto:sage [2008/02/26(火) 10:28:32 ID:???]
- 1が書き込みしないと
恐ろしいほどさびれてんねw 1だけがPHPでOOPに興味があって その興味を無理矢理に広めようとしてる このスレの落胆ぶり見ればよくわかるwww
- 556 名前:nobodyさん mailto:sage [2008/02/26(火) 12:06:28 ID:???]
- PHPにかぎらず、「オブジェクト指向」が一般化したと言っても、実際にはライブラリ(フレームワークを含む)が
クラス化されて、プログラマはそれを使ってるという程度の話でしかないから、OOPそのものの話が盛り 上がらないのは、当然といえば当然。
- 557 名前:nobodyさん mailto:sage [2008/02/26(火) 14:01:10 ID:???]
- WebProgで勢いあるのなんてくだすれぐらいだろ
- 558 名前:nobodyさん mailto:sage [2008/02/27(水) 22:15:02 ID:???]
- 何度も1のこと前向きにとらえようとしたけど
やはり1が何をしたいのかよくわからん
- 559 名前:nobodyさん mailto:sage [2008/02/28(木) 00:08:29 ID:???]
- OOPの勉強じゃないの?
- 560 名前:nobodyさん mailto:sage [2008/03/01(土) 01:04:42 ID:???]
- 自称非営利団体の運営を本業に転換する難しさのバーチャル体験学習。
乗せられたボランティアからの不満が噴出。 ありがち。そして解散。ありがち。
- 561 名前:nobodyさん mailto:sage [2008/03/02(日) 15:48:10 ID:???]
- 私も1が必死にスレ継続させてる意味が???
営利団体なら意味はわかりますが
- 562 名前:nobodyさん mailto:sage [2008/03/02(日) 16:50:51 ID:???]
- このスレ1年以上在るのに、 1 ◆SWtzLesEmM が書き込んだことがある日数って 16日だよ。
必死どころか、やる気があるのかと言いたい。 2007 02/23 02/24 02/27 02/28 05/12 06/12 07/06 07/11 07/26 2008 01/29 02/02 02/06 02/10 02/17 02/24 02/25
- 563 名前:nobodyさん mailto:sage [2008/03/02(日) 20:21:37 ID:???]
- 暇人乙
- 564 名前:nobodyさん mailto:sage [2008/03/02(日) 23:43:21 ID:???]
- まー、ここで勉強するな、とは言わないけど、本気でやろうと思ってる人は、まず自分で本買うなりして勉強すると思うよ。
別に興味ないやつはスルーでも何でもしときゃいいと思う。
- 565 名前:nobodyさん mailto:sage [2008/03/09(日) 10:19:09 ID:???]
- >>562
1自演乙!
- 566 名前:nobodyさん mailto:sage [2008/03/10(月) 14:48:07 ID:???]
- 自演度は THE END
- 567 名前:nobodyさん mailto:sage [2008/03/17(月) 07:13:22 ID:???]
- 保守
- 568 名前:nobodyさん mailto:sage [2008/03/28(金) 02:04:42 ID:???]
- このスレで、今日から貴方もOOP!!!\(^o^)/
>>1 オッパッピーの間違いですよね
- 569 名前:nobodyさん mailto:sage [2008/04/20(日) 09:34:37 ID:???]
- 保守
- 570 名前:nobodyさん mailto:sage [2008/05/24(土) 06:41:54 ID:???]
- 保守
- 571 名前:nobodyさん mailto:sage [2008/06/16(月) 13:47:07 ID:???]
- 難解も、難解も、オブジェクト指向
- 572 名前:nobodyさん mailto:sage [2008/06/17(火) 12:52:46 ID:???]
- スレタイの主旨からずれるけど、
やはりC言語は、一度は学んでいた方が良いな。 Javaからプログラムに入ったから、PHPのOOPでアロー演算子使うのにとても違和感あったのだけど、 Cの構造体を知って、ドットシンタックスよりアロー演算子の方が正統派と思えるようになった。
- 573 名前:nobodyさん mailto:sage [2008/06/17(火) 13:01:04 ID:???]
- どっと疲れる
- 574 名前:nobodyさん mailto:sage [2008/06/17(火) 16:56:31 ID:???]
- どっと込む
- 575 名前:nobodyさん mailto:sage [2008/07/01(火) 00:56:40 ID:???]
- >>573
>>574 バカアロー
- 576 名前:nobodyさん mailto:sage [2008/07/27(日) 23:15:55 ID:???]
- 諸事情により、Web系のプログラミングから離れていたけれど、
また時間がとれたら舞い戻ってきます。よろしくw
- 577 名前:nobodyさん mailto:sage [2008/08/09(土) 20:52:22 ID:???]
- PHPに触る機会が・・・なんで、VBばっかりなんだ・・・
- 578 名前:nobodyさん mailto:sage [2008/08/19(火) 00:44:43 ID:???]
- 保守
- 579 名前:nobodyさん mailto:sage [2008/08/28(木) 21:10:25 ID:???]
- 保守
- 580 名前:1 ◆SWtzLesEmM [2008/09/02(火) 15:51:27 ID:w90kCMMO]
- クラスの作り方(設計)について、考え方が参考になる本がありました。
www.amazon.co.jp/dp/4798110558/ モデルとプロセスをめぐる冒険 「モデリング」ということについて調べてみると、いろいろノウハウがあるようです。
- 581 名前:nobodyさん mailto:sage [2008/09/27(土) 22:23:48 ID:???]
- 保守
- 582 名前:nobodyさん mailto:sage [2008/10/06(月) 00:30:42 ID:???]
- 保守
- 583 名前:nobodyさん mailto:sage [2008/10/24(金) 23:26:54 ID:???]
- 保守
- 584 名前:yodobashi mailto:sage [2008/10/26(日) 01:15:24 ID:???]
- 大手ECサイトのヨドバシドットコムが、サイトリニューアルから大規模な障害を3日間...
detail.chiebukuro.yahoo.co.jp/qa/question_detail.php?qid=1220150877 506 :目のつけ所が名無しさん:2008/10/26(日) 00:47:20 大手ECサイトで、ここまで派手なリリース失敗は初めて見た。 エンジニア向けIT情報誌や関連サイトは、ぜひ取材して原因を明かして欲し いは。
- 585 名前:nobodyさん mailto:sage [2008/11/05(水) 20:43:48 ID:???]
- 保守
- 586 名前:nobodyさん mailto:sage [2008/11/13(木) 23:12:08 ID:???]
- 保守
- 587 名前:nobodyさん mailto:sage [2008/11/15(土) 09:19:30 ID:???]
- 定期的に保守してるの誰?
糞スレに対してその執念が怖いんだが。。。
- 588 名前:nobodyさん mailto:sage [2008/11/23(日) 22:46:31 ID:???]
- お前の粘着質の方が怖い
- 589 名前:nobodyさん mailto:sage [2008/11/29(土) 11:22:40 ID:???]
- PHP でオブジェクト指向の設計をするための 7 つの良い習慣を身につける
www.ibm.com/developerworks/jp/opensource/library/os-php-7oohabits/ PHP での適切な OO の習慣を身につけることによって、より安定していて、保守が容易で、拡張も容易にできるアプリケーションを作成することができます。そのためには、次のことを忘れないでください。 * 控え目である * 良き隣人である * メドゥーサを見ないようにする * 結びつきを極力弱くする * 結束性を高める * 家族の一員として扱う * パターンで考える こうした習慣を身につけ、使いこなせるようになると、皆さんはきっとアプリケーションの品質が変わったことに驚くはずです。
- 590 名前:nobodyさん mailto:sage [2008/11/30(日) 22:51:36 ID:???]
- 内容は否定しないが、その書き方はどうかなと思うな。
英語の翻訳だからなのかな。 「メドゥーサを見ないようにする」なんて飛躍した比喩表現では イメージつかないだろw
- 591 名前:nobodyさん mailto:sage [2008/11/30(日) 23:12:38 ID:???]
- phpspot.org/blog/archives/2008/11/php_7_1.html
パクりblog乙
- 592 名前:nobodyさん [2008/12/01(月) 12:13:27 ID:YUzphIUV]
- >>589
メデューサの項目でインタフェースを使う意義って何? ファクトリーパターンの利点しか説明してないような気がするんだが
- 593 名前:nobodyさん mailto:sage [2008/12/02(火) 01:29:02 ID:???]
- >>591
広告の方が多いってどうなんだよ 1:4で広告じゃねーか
- 594 名前:nobodyさん mailto:sage [2008/12/04(木) 18:30:24 ID:???]
- DIコンテナとかどうなのか
|

|