No.4ベストアンサー
- 回答日時:
> それぞれをオブジェクトとする以外に方法は無いような気がしますが。
オブジェクト指向における「オブジェクト」って,自律的なモノであって,単なる他動的なモノではありません。
ですから,前者以外に方法は無いような気がします,という問いに対しては,後者の方法があります,と回答できます。
----------------
例えば,次のようなコードが書けるオブジェクト指向言語があるとします。
(相当いいかげんです。プログラムに詳しい方,ご容赦ください)
A = new クラス(リスナーC)
A.動け(イベントB)
このオブジェクト指向言語では,次のように機能することを想定しています。
・インスタンスAには,イベントを感知する機能Cが組み込まれた。
・リスナーCは受け取ったイベントBを解釈して適切な動きのパターンを決める。
他の知らないイベントに対しても適切な動きのパターンを決められる。
・Aは自分に対する「動け」というメッセージとそのパターンに対して
自分がどうすればよいのか知っている。
・(例えば)Aが動くことによって盤上から外れてしまったり,
Aが動く先に敵がいたりしても,Aは自分がどうすればよいのか知っている。
質問者自身がおっしゃっているとおり,インスタンスAは自身についての属性と操作をともに内蔵しており,それ自身が独立したインテリジェンスを持つ擬人化されたモノ,すなわちオブジェクトなわけです。
----------------
それに対して,非オブジェクト指向な言語ですと,こんなコード例が想定できます。
動け(A, リスナーC, イベントB)
このコードのポイントは,
Aが自律性を持つオブジェクトではないため,すべてを単なる「操作対象」として他動的に扱うしかないということ。
変数とリスナーの組合せは適切か? リスナーとイベントの組合せは適切か? 変数とイベントの組合せは適切か? 各組合せのパターンに対応してそれぞれどう動けばよいのか? 自身の盤上の位置や敵の位置によって動きはどう変わるのか? 等々…
これらをすべて「動け」プログラムの中に記述することで,前者と同等の機能を持つシステムを作ることができます。
----------------
単純なイメージで説明するならば。
ひとかたまりのシステムを実現するのに,
「この機能はすべて○○に任せる。俺は○○に指示するだけ。あとは○○が責任を持って立派にやってくれるようにしておいた」というスタンスなのがオブジェクト指向。
「このシステムの機能はすべて俺が管理する。モジュール分割などして管理しやすい工夫はするけれど,システム要素のすべてを把握しておりそれに指示できるのは俺一人」というスタンスなのが「手続き型」という非オブジェクト指向の代表例になります。
No.3
- 回答日時:
文面から想像しますと「オブジェクト指向」を理解されてない気がします。
オブジェクト指向の「オブジェクト」とは、あえて簡単に言うと、関数やサブルーチンです。
関数やサブルーチンは、必要な時に何度でも繰り返し使えます。
また、これをベースに新機能を追加して拡張することが出来ます。
つまり「オブジェクト指向」とは、関数やサブルーチンを使い回すことです。
と前置きしまして、質問の「オブジェクト指向でないプログラム」にお答えします。
オブジェクト指向でないプログラムとは、関数やサブルーチンを一切使わずに、同じ処理(コード)をその都度書くプログラムです。
続いて・・
>それ以外の組み立て方法ってどうやるのでしょうか?
にお答えします。
例えば、
プログラムの中に、消費税を計算する工程が沢山ある場合、
オブジェクト指向ではこの計算式を自作の関数に置き換えます。
プログラムが短くスッキリします。
また税率が変更した時には関数を修正するだけで簡単です。
一方、オブジェクト指向でないプログラムは
消費税の計算式を毎回書いて、税率が変われば全部の計算式を修正するのです。
※やや強引な説明ではありますが、分かり易く言うとこんな感じです。
No.2
- 回答日時:
ソフト屋さんではないので、厳密な事は言えませんが、
オブジェクト指向とは、そもそもプログラムではなく、設計手法などの方法論ではないでしょうか?
方法論ですので、その作法に習って設計すれば、どのような言語を用いてもオブジェクト指向っぽく記述する事は可能かと思います。
オブジェクト指向っぽく、記述できると言うだけで、オブジェクト指向を適用しやすいと言われるC++であってもオブジェクト指向でないような記述も出来ると思います。
では、どこまでがオブジェクトか?
と、言われると定義の中に粒度は含まれていないような気がします。
ある人がこれは、オブジェクトだと言っても、他の人が違うと言うような事も起こり得ると思います。
と、なると、結局の所、何かを作る際に、チームやグループでその粒度と言うものを定義する必要が出てくるように思います。
しかし、粒度を決める作業にいちいち時間をかけていたら、それこそ生産性が下がりますし、合理的ではないことが多いと思われますので、各人にオブジェクトの粒度自体の定義は任されているように思います。
さらに言えば、オブジェクト指向では設計が難しい物もあると思います。例えば、同じ属性が複数のクラスにまたがる場合などです。複数のクラスにまたがる属性をわざわざ複数のクラスで記述していたら、それこそ合理的ではありません。そのような状況を回避するために、アスペクト指向などと言う方法論もあったりします。
個人的な認識では、オブジェクト指向という考えが主流になってきたのは1990年代後半かと思います。それ以前にも確かにオブジェクト指向という考えはあり、具体的な言語として個人的に知ってるのはEiffelという手続き型言語ですが、余りもてはやされてなかったようにも思います。
これらの時代背景を捉えると、オブジェクト指向と言う考えが主流でなかった時代からあった言語はオブジェクト指向では無いとも言えますし、どのような言語でもアスペクト指向で記述できると思いますから、オブジェクト指向ではなくアスペクト指向だと言う事も可能かもしれません。
しかし、やはり、オブジェクト指向という言葉は、設計手法などの方法論の一つだと思いますから具体的レベルに落ち込む物では無いように思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA オブジェクトマクロ 使用指定について お詳しい方教えてください。 共通エクセルフ 2 2023/03/14 17:26
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/05/21 02:41
- CAD・DTP Autocad Scriptファイルからの入力とコマンドラインからの入力が違う 1 2023/08/01 09:13
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- Java オブジェクト指向プログラミングの実践本を紹介してください 3 2022/09/19 04:56
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- Illustrator(イラストレーター) 【シェイプ形成ツール】でうまく分割できない 1 2022/05/26 10:57
- Google Maps Blue stacks 5 のキーマッピング方法。 1 2022/09/09 21:33
- ノートパソコン gifアニメ―ションを動画(mp4でOK)にしたい 1 2022/08/14 09:51
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オーバレイ方式と仮想記憶シス...
-
マスクROM と PROMの違いについて
-
三菱シーケンサーA1SHCPUとA1SJ...
-
三菱製PLC:ファイルレジスタ(...
-
グーグルの障害者訓練プログラ...
-
東京でヨコイのソース買えますか?
-
納品 vs ご納品 どちらが正し...
-
納入日と納品日について
-
バーコード作成ができるフリー...
-
texに関する初歩的な質問
-
発注書と見積書の品番が異なっ...
-
購入手続き後の値上げ
-
「スポット受注」はどういう意...
-
UNIX:テキストファイルのNULL...
-
契約書の「重大な背信行為」は...
-
Windows server 2022 CALとSQL ...
-
PHPとDW8の関係と設定に...
-
C#の単体テストでローカル変数...
-
契約期間内における値上げ等に...
-
formで送信したPOSTデータの削...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テストについて
-
Zと2とか紛らわしいのがあるか...
-
三菱製PLC:ファイルレジスタ(...
-
グーグルの障害者訓練プログラ...
-
プログラムソースの値段
-
三菱シーケンサーA1SHCPUとA1SJ...
-
インプットとアウトプット
-
東京でヨコイのソース買えますか?
-
システムを作るにあたり、SQLSe...
-
オーバレイ方式と仮想記憶シス...
-
ナショナル NE-1401F の業...
-
マスクROM と PROMの違いについて
-
フライに天つゆ
-
エントリーシート
-
ダメなシステムの保守
-
VBソースのバージョン管理ソフ...
-
彼氏が、プログラムリリース前...
-
参考書での説明が曖昧なので伺...
-
不具合の現状認識をしないプロ...
-
シュバリエソースって?
おすすめ情報