最近rubyの勉強を始めたのですが、オブジェクト指向のイメージがよくわかりません。クラスとインスタンスを作ることで具体的に何が便利になるのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答12件
0
最初のうちはそれほど気にする必要はないと思います。
自分でプログラムを書いて、いろいろ工夫するうちに利点が分かってくるはずです。
投稿2016/06/28 18:22
総合スコア52
0
私もオブジェクト指向を勉強していて「クラスという金型でたい焼きというインスタンスを作る」とか「犬クラスと猫クラスがあり、それらは動物クラスを継承していて」とか言われても分からない人間でした汗
いろいろ解説記事を読んだ中で、一番しっくり来たのがドラクエでの例えですね(ドラクエ知らなかったらすみませんm(_ _)m
「スライムAがあらわれた。 スライムBがあらわれた。 スライムCがあらわれた」
ここでいう「スライム」がクラスに、「スライムA〜C」がインスタンスにあたります。
スライムというクラスは、スライムのパラメータ(データ)(ex. 攻撃力、防御力、経験値、ゴールド...etc)と行動(メソッド)(ex. 攻撃、仲間を呼ぶ、逃げる)という情報を持っています。クラス自体に実体はありません。
スライムクラスから生成されたインスタンスであるスライムA〜Cは、スライムクラスが持つデータとメソッドを持った実体です。実際に勇者と戦うのはインスタンスです。スライムA〜Cはそれぞれが独立しており、スライムAを倒してもB、Cは健在です。経験値もゴールドも各々のインスタンスからもらうことが出来ます。
他にも、カプセル化やポリモーフィズムなどの概念もドラクエを例に説明していた記事があったのですが失念してしまったので、見つかり次第貼ります。。。中途半端で申し訳ございませんm(_ _)m
投稿2016/06/29 01:43
総合スコア1679
0
古い記事ですが、次の一連の記事を読むとよいと思います。
- まつもと直伝 プログラミングのオキテ http://itpro.nikkeibp.co.jp/article/COLUMN/20060825/246409/
投稿2016/06/28 22:19
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
オブジェクト指向の良さとしてあがるのは,たくさんありますが簡単に上げますと,
- (意識すれば)疎結合になる
- (多態性などをもたせれば) 機能拡張や,機能の再利用がしやすい
- (カプセル化を正しく行えば)意図しない状態の書き換えを防止でき,安全である
というものだと思います.(他にもメリットはたくさんあると思います)
そして,これらの恩知を受けるような状況というのは,大規模プロジェクトなどです.
なので,趣味プログラミングでは,オブジェクト指向によって得られるメリットがわかりづらい事が多いです.
なぜ,いちいちクラスを分けて書かなくちゃいけないのだ.なぜプライベートにしないといけないのだ.どこからも見えたほうが便利だろ.と思いがちですが,
サービスが大きくなればなるほど,余計な情報が混じっていたりしており,混乱を招きます.
長期運用するような,サービスであれば,機能の増減もあります.
そういった時に真価を発揮します.
- 疎結合になると何が嬉しいのか
http://blog.codebook-10000.com/entry/20131108/1383907001
- カプセル化の重要性
http://qiita.com/rf141/items/859116606a35152bf715
- オブジェクト指向という考え方が生まれた背景
投稿2016/06/29 09:08
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
例えば「ツイート」というクラスがあり、そのクラスはツイートの文章、ツイートのID、ツイートをした人といった情報を持ち、そのツイートに対していいねしたり、リツイートしたり、返信したりという操作ができる、のような設計になっています。
あくまでクラスはそういった設計だけなので、実際に「@hogeさんの2016年何月何日何時何分の『眠い』というツイート」のように特定の実体を指すものではありません。「ツイート」という概念とは何か を表したものがクラスです。
それに対して、インスタンスはそのクラスを基にした実体です。
インスタンスは上述したようなツイートIDやツイートした人などの情報を持っているので、そしていいねするなどの操作も定義されているので、そのインスタンス(ツイート)に対して簡単にいいねしたりリツイートしたりすることが出来ます。
重要なのは、そのインスタンスを利用する側は具体的に いいね はどのような方法で行うのかなど知らなくて良い点です。
具体的に「どうTwitterにプログラムからアクセスしていいねをするのか」を知っている必要があるのはクラスだけです。
投稿2016/06/28 19:23
総合スコア393
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
こちらがわかりやすいかもです。
http://javalove.hatenablog.com/entry/object-oriented
classは部品みたいなもので
車で例えると
車体
右後輪タイヤ
左後輪タイヤ
右前輪タイヤ
左前輪タイヤ
で成り立っていた場合、
車体ごとに毎回4つのタイヤを定義するのは手間です。
なので、4つのタイヤを部品として作っておき、
インスタンス化することで
プリウスやキューブのタイヤとして実装できます。
classにすることで効率がいいのだと思います。
SE8 Silver落ちた者の回答ですが、こんなところだと思います。
投稿2016/06/28 18:52
編集2016/06/28 19:07総合スコア615
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
オブジェクト指向という考え方は突然ぽっと出てきたものではなく、
今まで連綿となされてきたプログラミング開発への改良の延長
と考えてます。なので、オブジェクト指向を単独でみた場合に
「なにがいいのか?」と言われても分かりにくいかも。
あと、大規模な開発をなんとかしたいという流れで
登場したものなので、小さなものを作ってるうちは
なかなか実感がつかめないかもしれませんね。
投稿2016/06/28 18:39
総合スコア7458
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/28 20:04
0
本来のオブジェクト指向以前の状態だと思うので、クラスとインスタンスについてですが、
文字型って分かりますか。 もうとっくに便利に使いこなしていると思いますよ。
分かんなかったら C言語の文字列操作をやるといいですよ。
投稿2016/06/29 09:16
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
具体的なコードを読むのが一番です。
オブジェクト指向でも、汚く書くことができますので、特に良いコードを読むことをお勧めします。
ほかにも良い本があると思いますし、そこそこ古い本ですが、私は結城浩さんのデザインパターンの本で勉強しました。
投稿2016/06/29 04:41
総合スコア2883
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
javaを4年やってますが、オブジェクト指向なにそれです。
投稿2016/06/29 03:44
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
過去に似たような質問があって、そこで自分のイメージを記載したのでよかったら見てみてください!(ちなみに妖精がーって書いてあるところですw)
https://teratail.com/questions/15207
投稿2016/06/29 02:25
総合スコア2283
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
適切な例は出ているので、参考になるかどうか解りませんが。
通信の例
httpの標準ポートは、80ですが
これを、ポート80とポート8080でサービスする場合に、
関数では、80用と8080用の変数を別々で持つ部分(配列など)が出てきます。
これが、2個位では大した事はありませんが、ポートを任意設定などとすると、
変数を幾つ持つか?、仕様上増えたら変数を増やすのか?という事になります。
ダイナミックなクラスでは、雛形のクラスを一つ用意して、new:実体化 する事で、
メモリーが許す範囲で、80、8080、任意のポートへの対応を済ますことが可能です。
COM / TCP / UDB / HTTP だけでなく、1:N、N:Nに相当する事をプログラミングすると、
オブジェクト、クラスの有難味を感じます。
’
関数呼出の例
関数型処理系では、パラメータ違いで、
同一関数名を使うことは出来ませんが、
関数ABC で、パラメータ Integer
関数ABC で、パラメータ IntegerA、SingleB
関数ABC で、パラメータDouble
と云う事はできず、
関数名を変える必要があります。
(その為、便利機能的付け焼刃が有る場合も。)
オブジェクトでは、多態性をサポートしていれば
同一の呼出名で、パラメータ数違い、
パラメータ種別の違いを扱う事ができます。
⇒作る方、使う方としては、
同一呼出名で、パラメータ違いを許容できる。
似たような機能を同一呼出名で呼出可能
オブジェクト型以前の処理系では、
使用するデータ型毎に、別名の関数が用意されていたりしました。
投稿2016/06/29 00:27
総合スコア2028
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。