🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

解決済

4回答

1866閲覧

小規模なプログラムでクラス(オブジェクト指向?)を使う理由

退会済みユーザー

退会済みユーザー

総合スコア0

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

0グッド

1クリップ

投稿2019/09/16 09:45

編集2019/09/16 10:35

プログラミングの勉強のためにさまざまなプログラムを探していると、小規模なプログラムーたとえば(AIを実装していない普通の)オセローにもクラスが使われているのをよく見かけるのですが、なんのために小さなプログラムをオブジェクト指向(?)で作るのですか?

オブジェクト指向とは大規模開発のときに必要になってきて、小規模の開発では、むしろ手間がかかるだけで、オブジェクト指向の恩恵は得られないというように学んだ(認識ている)のですが。

プログラミングの練習のために簡単なプログラムを作る場合でも、オブジェクト指向を意識して開発した方が良いのでしょうか?

言語はpythonを想定していますが、(構文上classを使わざるを得ないものを除いて)プログラミング一般についての質問です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/09/16 11:01

> オブジェクト指向とは大規模開発のときに必要になってきて、小規模の開発では、むしろ手間がかかるだけで、オブジェクト指向の恩恵は得られないというように学んだ(認識ている) どうしてこのような認識なのかを説明してください。 小規模の開発でオブジェクト指向を使うと、どのように手間がかかりますか?
Zuishin

2019/09/16 11:03

たとえばオセロであれば、Player クラスから HumanPlayer と ComputerPlayer を派生させれば、どのような組み合わせでも Player vs Player に単純化され、非常に見通しが良くなるように思います。
退会済みユーザー

退会済みユーザー

2019/09/16 11:19 編集

オブジェクト指向は上手に設計すれば、大人数で大規模な開発をしている時でもコードの管理が簡単になるそうですが、上手に設計するのは難しくて、ひとりで小規模なプログラムを開発するときは労力に見合わないと"勉強した"のでそうだと認識したのです。 たとえば、オセロの例では必要な関数を列挙してそれらを適当に組み合わせるだけでも十分に作れるはずだと思っていましたが、見通しが良くなるという最大のメリットがあったのですね。
退会済みユーザー

退会済みユーザー

2019/09/16 11:22

その認識が間違ってるから…。オブジェクト指向なんてもう何も特別じゃないから難しいこと考えてなく良い。
退会済みユーザー

退会済みユーザー

2019/09/16 11:26

どう言う意味ですか?
guest

回答4

0

ベストアンサー

誤解を恐れずに言うと、オブジェクト指向ってオブジェクトって単位で設計する設計手法です。
そのため、実装ではオブジェクトを更に処理する必要があり、単純なフローを実現する逐次型プログラミング設計と比べ、ひと手間かかることになります。

多分それが「小さなプログラムに向いていない」ってことだと思います。

ただ、最初に言ったようにオブジェクト指向は設計手法なので、「オブジェクト指向で設計することになれた人の思考」としてはごく自然な設計になります。
そのため、小さくてもオブジェクト指向で設計されたコードもあります。

ちなみに class を使用しているからオブジェクト指向ってことはありません。

オブジェクト指向を意識して開発した方が良いのでしょうか?

初学者には難しいと思います。

投稿2019/09/16 11:28

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/16 11:41 編集

>「オブジェクト指向で設計することになれた人の思考」としてはごく自然な設計になります。 つまり、オブジェクト指向を使う理由があるから必然的に使ったというよりも、そのひとの設計手法がオブジェクト指向だったというわけで、とくに深い理由があるわけではないようですね。(もちろん場合によると思いますが) とても納得しました。 ありがとうございます。
退会済みユーザー

退会済みユーザー

2019/09/16 11:44

> そのひとの設計手法がオブジェクト指向だった そうですね。オブジェクトをどうするかってところから入るので、自然と実装もオブジェクト指向になります。 逆に初学者はその思考が理解できないので意識して開発するのは難しいと思います。 本読んでも記事読んでもライブラリ読んでもなかなか理解できないんですよねぇ^^;
guest

0

問題によるでしょう。
オブジェクト指向で書いたほうが楽なケースは少なくないと思います。

投稿2019/09/16 11:13

otn

総合スコア85886

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/16 11:25 編集

必要な関数を列挙してそれらを適当に組み合わせて作るよりも、オブジェクト指向で書いた方(たとえばメソッドとして機能を実装した方)が楽になる場合もあるということですね。
guest

0

そのコードの製作者に聞きましょう

#500行で少規模ってのもアレですが。。

投稿2019/09/16 10:32

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/16 10:41 編集

行数で規模を示すのは不適切だったので訂正しました。 実際は、初心者がひとりでも理解できる程度の、複雑でなくファイルを分割するほどの大きさでもなく、さらにはライブラリのように再利用を前提としたようなものでもないプログラムのことです。
y_waiwai

2019/09/16 10:41

そりゃそれを使うほうが楽だから使ってるんでしょう、としか言いようがないですが、そのコードを書いたわけでもない人がそれを答えることになんの意味があるんでしょう。
退会済みユーザー

退会済みユーザー

2019/09/16 11:48 編集

大規模なプログラムでオブジェクト指向が用いられていたのならば、そのプログラムを書いた人でなくとも経験の深い人であれば、"一般的な理由"としてオブジェクト指向で開発した理由(オブジェクト指向で開発する方が楽になる理由)を答えられるのと同じように、経験の深い方達に「小規模開発でオブジェクト指向を用いる理由」について質問すれば、誰が書いたのかとかそんなことは関係なく、"一般論"としてこういうメリットがあるからだ、と教えてくれると思ったので質問したのです。 あくまでも、プログラムやそれを書いた人には依存しない一般論としての質問です。
guest

0

小規模の開発では、むしろ手間がかかるだけで、オブジェクト指向の恩恵は得られないというように学んだ(認識ている)のですが。

Javaのようにクラスを立てなければいけない言語の場合は選択肢はありませんが、そうでない言語の場合はオブジェクト指向を使うかどうかを選べます

便利だったら使う、不便だったら使わない、というだけの話で、規模は関係ありません。

投稿2019/09/16 11:34

maisumakun

総合スコア145970

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/16 11:40

規模云々ではなくプログラムを設計する上で楽になるかどうか、ということなのですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問