アプリ版:「スタンプのみでお礼する」機能のリリースについて

phpのプログラムをオブジェクト指向で書こうと思ったのですが、クラス間のデータのやり取りのあたりでつまづきました。

クラスはそれぞれ
1.設定用
2.データの読み書き用
3.入出力用
4.データ処理用
5.メイン
です。

オブジェクト指向で書く前よりはコードも見やすくなったのですが、例えば4のデータ処理のところからは1、2、3の全てのプロパティを参照していたりして、なんだか複雑に。
オブジェクト指向で検索するとwikipediaには

プログラムを構成するコードとデータのうちコードについては手続きや関数といった仕組みを基礎に整理され、その構成単位をブラックボックス とすることで再利用性を向上し、部品化を推進する仕組みが提唱され構造化プログラミング (structured programming) として1967年にエドガー・ダイクストラ (Edsger Wybe Dijkstra) らによってまとめあげられた

と書いてありました。これだと関数を種類ごとにまとめただけであまり部品化はされておらず、前と変わらないような気がしてしまって・・・

例えば設定用のクラスはのプロパティほとんどすべての所で値が必要になるのですが、毎回newを使うのは気が引けるので、クラスの外で new でインスタンス化して必要なところから毎回 global で呼び出したりしているんですが・・・使い方が間違っている気がするのですが、そういったことを解説しているサイトが見当たらなかったため、全く分からない状態です。そもそもこの場合、設定用の値はクラスにまとめるべきなのかどうか・・・。
書く時は$クラスー>メンバ変数 とか $クラスー>メンバ関数 のように書くので今何をしているのかが分かりやすく、それは便利だと思うのですが。

すみません。自分でも上手く説明できずによくわからない文章になってしまいましたが、結局の所オブジェクトがどんな物でどんな書き方をすれば良いかが分かっていないのだと思います。そういった所を分かりやすく教えてください。お願いします。

A 回答 (3件)

一人だと「クラスを使う人」と「クラスを作る人」に上手に頭を切替える必要があって、その辺で混乱しているのかも…。


方法として、各クラスを書いてメイン処理を書くのではなく、逆にまずクラスを使う人の立場で、こんな関数があったら便利だな、という感じで メイン(クラスを使う方)から書いてゆき、実際のクラスや関数は後で実装する(クラスを作る人になる)というのも手です。

また「クラスを作る人」になったときは「いつかフリー配布して皆に使ってもらう」ようなつもりで書けば、必要なメンバ変数や関数が見えてくるかも知れません。globalが必要になることもないはずです。
※最初は自己流でよいので「 UML 」のクラス図を書き出して、一度整理して全体の構造を見直すことをお勧めします。


>設定用の値はクラスにまとめるべきなのかどうか・・・。
あまりピンと来ません。例えば、多言語対応とかで言語によって各種設定が変わるなら分かりますが…。普通に設定ファイルを読み込んで、各クラス・オブジェクトへ必要な値を渡し、取得した結果や生成されたオブジェクトを次へ渡してゆくのではダメなのでしょうか?

「何をどこまでオブジェクトと見なして、どのようにクラスとして切るか」は、物事の見方、洞察・分析力、汎化するセンス、適度な妥協等、ちょっと慣れが必要かも知れません。
今は頭が脱皮している最中だと思います。もう少しで「見えてくる」はずです。

ちなみに以下が良書ですが、今見たら絶版のようで残念。中古も高値みたい。
http://www.amazon.co.jp/PHP%E3%81%AB%E3%82%88%E3 …
    • good
    • 0
この回答へのお礼

なるほど。使う人が使いやすいようになどとは考えてませんでしたね。
もう少し汎用性なども考えて使いやすいように、頑張ってみます。ありがとうございました。

¥ 25,998より これは、、残念ですね。

お礼日時:2012/07/28 01:21

私は、ぶっちゃけ完全に理解はしていないとは思うんですが、オブジェクト指向。



そんな私の意見としては、オブジェクト指向にしたからと行って、利便性はよくなるけど、簡潔にかけるわけではない。
とくに、PHPのような開発環境がメンバの名前を表示してくれたりとかをサポートしてくれないとかえって面倒なことに。
しかし、データをカプセル化ができたり、継承により、柔軟にクラスの使い回しができたり、便利にはなる。
つまり、過去に作ったクラスを、ちょっとだけ変えるのに便利。

なるんだけど、もともとPHPは、変数の型がなかったりと、ナチュラルにポリモーフィズムだったりするので、PHPであえてクラスで作る必要が・・・・ある?とも。

のと、オブジェクト指向といのは、毎回全部自分で作れちゃう、小さいソフトを作ってもたいして変わらないというか、逆に分けがわからなくなる。
やはり、大規模で大人数のプロジェクトで真価を発揮するものだと、、、、

アホな私はそう決めました。
なので、ガンガン関数ベースで書いていってみては?

オブジェクト指向がどういう使いかたかが分からないのは、多分経験不足で、とりあえず、使い回しを意識して、グローバル変数は使わず関数で全部書いてみる。
例えば、ファイル読み込み用・保存用の関数とか自作してみる。

で、何度かその使い回しを使っていくうちに、使いまわせない状況ってのが出てくるんだわ。
それを改善できるのが、クラスって考え方で、それがオブジェクト指向に近いんじゃないかなー?と、私は思うんだけど、、、、たぶん、もっと頭のいい人からは、「そんなんじゃねーよーっ!」と言われるかもしれない。www
    • good
    • 0
この回答へのお礼

なんとなくですが、オブジェクトのイメージがはっきりしてきました。
モヤモヤが無くなって気分すっきりです。ありがとうございます。

お礼日時:2012/07/26 16:27

PHPから一旦離れるのはいかがでしょうか?



「PHPでオブジェクト指向」となると、あまり参考書等も出ていないと思います。

例えば、Javaなら、言語+オブジェクト指向の参考書やサイトがたくさんあります。
これらで基礎を身に付けてから、PHPに応用するのがよいのではないでしょうか。
    • good
    • 0
この回答へのお礼

確かに、PHPでのオブジェクト指向の本は全然見ないですね・・
Javaはやった事が無いですが、本を探してみたいと思います。

お礼日時:2012/07/26 16:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!