• ベストアンサー

オブジェクト指向で作る事による、無駄なコーディング。

ごきげんよう。 PHPでオブジェクト指向でプログラムを作り始めて、まだそれほど利点は分かりませんが、クラスを作ると、それに付随して無駄なコーディングが増えていくような気がします。 これは、データや作業の切り出し方が悪いのでしょうか? 例えば、テレビとリモコンでいうと、チャンネルを変えるには、リモコンをおしてデータを送信。テレビ側にも、データを受信・解析する機関を作らないといけないので。 これが無駄と感じてしまうのですが。 今までだと、テレビとチャンネルを変えるは、手動でしたが、チャンネルはそのまま変えられたので。 いくつか分かった事は、オブジェクト指向は、グローバル変数にしなくても、そのような挙動をすることができる。 複数のオブジェクトを簡単に作る事ができる。 この点は、かなり便利と感じているのですが。 つたない説明ですがよろしくお願い致しますわ。

noname#25295
noname#25295
  • PHP
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • precog
  • ベストアンサー率22% (966/4314)
回答No.1

プログラムを変更しない前提なら、あるいは、デバッグしなくて良い前提なら、無駄と言っていいでしょう。 そういう場合はオブジェクト指向で作るのではなく、スクリプトでクイックハックするほうが能率的です。 オブジェクト指向の何が良いかは、少なくても数人で作る実用プログラムを、時間のタイトなプロジェクトで経験しないと実感出来ないかもしれません。

noname#25295
質問者

お礼

ごきげんよう。 私が感じた事は、必ずしもオブジェクト指向で作る必要はない。 一人で、自分のHP内で作るだけなら、必ずしも必要ではない、といった事です。 プログラムも関数ベースで作ったとしても、デバッグの妨げにはならない。 しかも、PHPだと何かをリアルタイムに大量に動かすといった処理に不向きなので、それほどオブジェクト化することに、私は期待以上の魅力を見いだせませんでした。 書き込み処理や、表示処理のどのスクリプトでも共通するものは、別のファイルにすれば、デバックも簡素化できる。 やはり、オブジェクト指向は、複数のオブジェクトを大量に作る。 継承を利用する。 複数の人数で、短時間、もしくは、再利用できるプログラムを作っていくような事がないと、実感できないのかもしれません。 ありがとうございます。

その他の回答 (1)

noname#86752
noname#86752
回答No.2

短期的に見れば、質問者様がおっしゃっている通りです。 ちょっとした処理にクラスを作るのはコーディング量が増えるだけです。 でも、長期的に見ると違いが出てきます。 例えばテレビとリモコンが出来ていれば、ビデオとリモコン、エアコンとリモコンなどを作ることが簡単になったり、リモコンの機能を増やしたいときや、テレビがアナログからデジタルに変わったときなどに変更が少なく出来たりします。 そういう「再利用」や「長期にわたるメンテナンス」や「複数の部品の依存関係を少なくする」ときに力を発揮するものです。

noname#25295
質問者

お礼

ごきげんよう。 やはり、コーディングや頭の使い所は、増えるのですね。 わたくし自信では気が付きませんが、頑固な所もあり、どうしてもプログラムを作るのなら、一番すっきりとした形にしたいと思っていました。 それが、オブジェクト指向と少しずれているのかもしれません。 まだ、わたしくしには、 q=2772206で質問しているように、継承の具体的な利用法がピンと来ていないのも、オブジェクト指向の便利さが実感できていないせいかもしれません。 ありがとうございます。

関連するQ&A

  • オブジェクト指向

    Javaプログラミングを少し勉強し始めました。 そこで、オブジェクト指向という言葉が出てきました。 オブジェクトを作る利点というか意味はどのようなところにあるのでしょうか? 比較的簡単なプログラムなら、変数とメソッドで表示できると思うのですが・・。 ・コードが読みやすくなる ・実行速度が速くなる などの利点があるのでしょうか? なるべく分かりやすく解説してもらえればと思います。

    • ベストアンサー
    • Java
  • オブジェクト指向の本当の便利な点。

    オブジェクト指向の特徴は、ある程度分かりました。 が、個人で小さなソフトを作り、できるだけ自分でプログラムを作りたいため、オブジェクト指向の利点が今ひとつ分かりません。 PHPでは、構造化でできるだけグローバル変数を減らし、関数内でも関数名+変数名という変数名にしていたので、変数の名前が重複すると言ったこともなかったし。 関数名+でない場合も、関数内では不必要な変数は値を解放していたし。 過去の資産も関数を再利用する事もよくありましたし、継承のような事もしていました。 オブジェクト指向の便利さは分かるのですが、どうも実感できないというか、その便利さを持て余しているというか。 構造化プログラミングでも、さほど問題ないし。 delphiなので、JAVAのようにオブジェクト指向(クラス)が必須という訳でもないし。 逆にクラスを作ってしまうと、メモリーから解放しないといけないので、それが少し怖いです。 で、オブジェクト指向の利点をあげるとしたら何ですか? 可能なら、上位から3つくらいを詳しく書いてください。 ソフトは大規模か小規模か、制作者は大勢か少数・個人か、それは構造化プログラミングでは無理な事なのか? オブジェクト指向の利点や特徴は、分かるのですがピンとこないというか、実感できないというか・・・。

  • 【オブジェクト指向について】

    【オブジェクト指向について】 こんにちは。初めて質問をさせていただきます。 さて、ただいまVBを勉強中なのですが、オブジェクト指向のところで躓いてしまいました。 質問したい事は以下の点です。 (1) オブジェクト指向の理解について   オブジェクト指向とは、プログラミングをするときに変数や機能などをクラスというものに格納しておくことで、プログラミングを円滑にすすめるための概念であると理解していますが、この理解は正しいのでしょうか? ご回答お待ちしております。よろしくお願いいたします。

  • オブジェクト指向に関して。

    Javaの解説本を読んでオブジェクト指向プログラミングという物があることをしりました。その本には「オブジェクトはデータとそのデータを扱うための機能を持っている。この機能はメソッドと呼ぶ。クラスは設計図のような物で変数とメソッドから構成されている。設計図を実際に形にした物がインスタンスである。」と書いてありました。私はオブジェクト=クラスのような感じがしたのですが、実際のところオブジェクト=クラスでいいのでしょうか?  また、友人に話したところ、オブジェクト指向はサブルーチンに似ているといっていました。私はプログラミングの知識が全くないのでサブルーチンという物が何なのかわからないのですが、サブルーチンとオブジェクト指向の考え方は違うような気がするのです。友人に説明して納得させるにはどうしたら良いのでしょうか? ぜひ、力を課してください。

  • オブジェクト指向Perlの勉強の仕方について

    今までPerlで掲示板などを自作した事があるのですが、オブジェクト指向をまったく取り入れていません。 オブジェクト指向でないPerlプログラミングについてはおおよそ理解しているつもりなのですが、 オブジェクト指向Perlについては全く理解できていません。 書籍を探しても、Perlについての書籍は大抵が初心者向けのものか、私にとっては難解なもの(オライリーなど)ばかりで、ちょうどいい程度の書籍が見当たらないのですが、 何かオススメの書籍がありましたらご紹介ください。 ---参考:私が理解している範囲--- 1.Perlプログラミングの基礎 変数、配列、ハッシュなどのデータ型 ループやサブルーチン、ライブラリなどの構造 2.オブジェクト指向について MacromediaFlashのActionScriptがある程度 理解できていますので、 「オブジェクト指向とは何か」 は多少理解しているつもりでいます。 (錯覚かもしれませんが) 3.目的 PerlMagickなどのパッケージを利用したいのだが、 利用方法がわからないため ------------------ 以上、身勝手な質問で恐縮ですが、 よろしくお願いします。

    • ベストアンサー
    • Perl
  • オブジェクト指向の勉強にちょうど良いソースコードはありませんか?

    オブジェクト指向の勉強にちょうど良いソースコードはありませんか? VB6からVB.NETへの移行中ですが、VB.NETは本格的にオブジェクト指向言語となったそうで、オブジェクト指向といえばデザインパターンらしいので勉強をしつつリファクタリングを行っています。 デザインパターンのサンプルコードはwebで散見されますが、どれも説明に必要な最小限のコードなので実際の開発にどのように適用したらよいかいまいちイメージできない部分があります。 また、具体的なところだと、オブジェクト指向ではオブジェクト間の結合度を弱くしてグローバル変数を極力使用しないとありますが、設定値を管理するオブジェクトのようにあちこちから参照されるものはやはりグローバルにするのが一般的なのでしょうか。 設計の参考になるソースコードとかサイトとか教えてください。 ちなみに、今作成しているのは測定器や電源装置などを制御してデータ収集したりする制御系のソフトです。

  • phpのオブジェクト指向でつまづきました・・・

    phpのプログラムをオブジェクト指向で書こうと思ったのですが、クラス間のデータのやり取りのあたりでつまづきました。 クラスはそれぞれ 1.設定用 2.データの読み書き用 3.入出力用 4.データ処理用 5.メイン です。 オブジェクト指向で書く前よりはコードも見やすくなったのですが、例えば4のデータ処理のところからは1、2、3の全てのプロパティを参照していたりして、なんだか複雑に。 オブジェクト指向で検索するとwikipediaには プログラムを構成するコードとデータのうちコードについては手続きや関数といった仕組みを基礎に整理され、その構成単位をブラックボックス とすることで再利用性を向上し、部品化を推進する仕組みが提唱され構造化プログラミング (structured programming) として1967年にエドガー・ダイクストラ (Edsger Wybe Dijkstra) らによってまとめあげられた と書いてありました。これだと関数を種類ごとにまとめただけであまり部品化はされておらず、前と変わらないような気がしてしまって・・・ 例えば設定用のクラスはのプロパティほとんどすべての所で値が必要になるのですが、毎回newを使うのは気が引けるので、クラスの外で new でインスタンス化して必要なところから毎回 global で呼び出したりしているんですが・・・使い方が間違っている気がするのですが、そういったことを解説しているサイトが見当たらなかったため、全く分からない状態です。そもそもこの場合、設定用の値はクラスにまとめるべきなのかどうか・・・。 書く時は$クラスー>メンバ変数 とか $クラスー>メンバ関数 のように書くので今何をしているのかが分かりやすく、それは便利だと思うのですが。 すみません。自分でも上手く説明できずによくわからない文章になってしまいましたが、結局の所オブジェクトがどんな物でどんな書き方をすれば良いかが分かっていないのだと思います。そういった所を分かりやすく教えてください。お願いします。

    • ベストアンサー
    • PHP
  • オブジェクト指向コンパイラのインスタンスの構造について

    インタプリタやコンパイラの中身について興味があり勉強しています。といってもまだ簡単な字句解析や構文解析のレベルです。 読んだ本にはオブジェクト指向言語については書かれていませんでした、そこで一つ疑問に思ったこと点について質問させてください。 簡単な言語の場合、使用する変数が宣言されると、その領域がスタックやヒープ空間に確保されるという風に理解しました。 一方オブジェクト指向言語にて、あるクラスのインスタンスを生成した場合を考えます。インスタンスには変数の他に関数やメソッドといった処理手続きが含まれていますよね。その手続きをコンパイルしたコードは何処に置かれているのでしょうか? 手続きのコードもヒープ空間に確保された各インスタンスの領域にコピー(?)されて実行されるのでしょうか。それとも処理手続きの実体は実行プログラムに含まれていて全インスタンスで共通で利用するようになっているのでしょうか。 初心者の素朴な疑問です、ご回答いただければ幸いです。

  • オブジェクト指向の間違いと改善案について

    オブジェクト指向というより オブジェクト指向プログラミングについての間違いと改善案をブログに書いてみました。 http://chaosblogchaos.blog.fc2.com/?no=2 この考え方に間違いがあるでしょうか? 説明不足の点はないでしょうか? よろしくお願いします。 以下ブログの内容 ---------- ■カオス指向(仮) カオス指向(仮)とは、オブジェクトに処理を追加・削除することでオブジェクトの振る舞いに無限性を持たせる試みです。 カオス指向(仮)ではデータが主体となり、木構造で保持します。 (ファイルフォルダで例えると、フォルダがオブジェクト、ファイルがプロパティに当たるイメージです) 処理を追加・削除が可能なことからプロトタイプベースがもっとも近いですが、 オブジェクトが親子関係を持つことと オブジェクトの親子関係から処理が影響を受ける事が異なります。 ●オブジェクトの内容  ・配列か連想配列で子オブジェクトを保持できます。    オブジェクトどうしの強い関係を意味し、親が削除される場合、子も削除される関係にあります。    オブジェクトはルートからの木構造の中に必ず存在する事になります。  ・別途、変数領域を確保する。    処理で使用する値を保持します。    オブジェクトどうしの弱い関係を保持できます。  ・処理を持つ。    オブジェクトに処理を持たせることができるます。    プロトタイプベースと異なる点は、    オブジェクトが処理を持っていても、オブジェクトがその処理をするわけでは無く、自身と子オブジェクトに対して適用され、”認識タイプ”を持つ場合に処理します。  ・”認識タイプ”を持つ。    処理の実行を制御します。認識タイプを含むかどうかで処理を行うかどうかを決定します。    オブジェクトのクラスは”認識タイプ”で実現可能と考えて問題ありません。 ●”認識タイプ” オブジェクト指向なら、 人は歩く、話す、・・・。Aさんは人。Aさんは話す。 カオス指向なら、 歩けるなら歩く、話せるなら話す、・・・。Aさんは歩ける、話せる、・・・。Aさんは話す。(歩ける・話せるを認識するようにした場合) 人は歩く、人は話す、・・・。Aさんは人。Aさんは話す。(人を認識するようにした場合) のどちらでも作成が可能で、 話せるなら話す、・・・。の場合、ウサギAの”認識タイプ”に話せるを追加することで、ウサギAは話せるようになります。 話せるウサギは実用的ではありませんが、 特定ユーザーのアクセスログだけ出力したい場合は、 処理を用意し、対象ユーザーに”認識タイプ”を追加することでログ出力処理を追加することが出来ます。 ●木構造と処理 ユーザー   日本     Aさん     Bさん   アメリカ     Cさん とある場合、 全ユーザーの処理をユーザーに保持 日本用の処理がある場合、日本に アメリカ用の処理がある場合、アメリカに処理を追加します。 そうすることでAさんは日本の処理、Cさんはアメリカの処理が行われます。 ●同一処理による関係 処理には優先順位が存在し、その順番で処理します。 処理A、処理Bとある場合、処理Aの中で元処理として実行します。 処理Aの中で元処理を行わない場合、処理Bは行われません。 ■カオス指向(仮)でどうなるか? ・幾つかのデザインパターンが不要になります。   デコレータ・コンポジット・ステートパターン等 ・多重継承らしきものが出来るようになります。   ※根本から違うので、多重継承らしきものとします。 ・循環問題が発生しませんない   ファイルフォルダのような木構造では循環は起こりえない。 ■オブジェクト指向プログラミングの問題点 オブジェクトにつき1クラスという決め付けが オブジェクト指向プログラミングにはあったのではないかと考えております。 オブジェクト指向では、 オブジェクト:クラス:継承クラスは1:1:1で、1:1:*は条件により可能ですが原則不可能。 カオス指向では、 オブジェクト:クラスは1:*と頭からクラスを複数持たせることで多重継承らしき形が実現可能ということです。 クラスの継承がなくなっていますが、クラスを複数持たせる事とクラスに順番を持たせることで継承が可能です。 オブジェクト指向プログラミングでは、オブジェクトにつき1クラスという決め付けが継承というシステムを作り 多重継承を難しくしたのではないかと考えております。

  • オブジェクト指向の実際について。

     初めまして、ラブ・ザ・ゲームといいます。 オブジェクト指向・・・、の理解度は単語だけ知っている、程度だと思います。 クラスを使っている掲示板があるので、さらにシンプルにして、質問させてください。 PHPは4を、想定しています。 Class main_bbs{ //ここはクラスで使う変数の宣言部分ですよね。 var $file ; var $name ; var $title ; var $message ; //ここで、コンストラクタが来ると思います。 function main_bbs(){} //Q1.コンストラクタは、何を初期化すればいいのでしょうか? //次は、データを格納する関数でしょうか。 //Q2.この部分は、クラス内で変数を使うためですよね? function FileInf($file, $name, $title, $message){ $this->file = $file ; $this->name = $name ; $this->title = $title ; $this->message = $message ; } //この掲示板では、チェックを複数に分けています。 //改行変換、危険タグの排除、等。 function Check($str){/* 処理内容 */ return $str; } //これらは、main_bbsクラス内に収まっているのですが、別のクラスに分けた方がいいと思うのですが、積極的にしない理由はありますか? //分ける理由は、その方が汎用性が高まると思うのですが。 //データの成形 function CreateDate(){ $this->name = $this->Check($this->name) ; $this->title = $this->Check($this->title) ; $this->message = $this->Check($this->message) ; } //書き込み処理 function Write(){ CreateDate()を使った後、書き込む処理。 } //書き込み処理も、別のクラスを作った方が、汎用性が高まると思うのですが、積極的にしない理由はありますか? } //呼び出し側、見ているサンプル $main_bbs = new main_bbs ; $bbs -> FileInf($file, $name, $title, $message) ; $bbs -> CreateDate() ; $bbs -> Write() ; ここまでは、参考にしている掲示板の通に書いたつもりです。 ある程度は理解できたと思います。 ・・・が、実際作成する場合、どこから着手すればいいのかが、分かりません。 小さな部分から作っていくって行けばいいのでしょうか?

    • ベストアンサー
    • PHP