ここから本文です

プログラミング言語Rubyについて。

アバター

ID非公開さん

2019/11/1808:44:23

プログラミング言語Rubyについて。

どうしてもオブジェクト指向が理解できません。

例えば数学の問題があるとしたら
問題クラス、回答クラス、計算クラス、出力クラス
みたいに分けることでしょうか?

またその場合、initializedからプログラミングはスタートすると考えて宜しいでしょうか??

閲覧数:
86
回答数:
6

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

nora1962jpさん

2019/11/1820:33:12

学級、科目、授業、教師、生徒などのクラスに分けることはあるでしょう。

「オブジェクト指向とは」でなく、今ある問題をどう分析して解決策を設計するかで考えないと理解は難しい。
rubyの場合は処理の最初は「トップレベル」から開始します。
言葉は難しそうですがスクリプトの頭から処理するので流れはそんなでもないです。

私からすると機械語に「ループ」という概念がないし(ジャンプ命令はあっても)、SQLのような集合指向もトランザクションもないです。

とりあえず、わかったようなわからないようなではじめて、そのうち何かをつかめるようになるという場合が多いように思いますけど。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜5件/5件中

並び替え:回答日時の
新しい順
|古い順

nee********さん

2019/11/2423:20:00

オブジェクト指向は一意に定義されていないものです。
真面目に考えることは止めなさい。

■現実的なひらべったい回答
幕の内弁当的にまとめることです。
古いプログラムスタイルはデータ領域、プログラム領域と分けていました。
オブジェクト指向は弁当箱にお箸がついて醤油ダルがついているように全部入っています。
食堂形式ではなく弁当場紺形式がオブジェクト指向です。

■文学的な現実的な回答
過去、プログラムとデータを分離して作りました。プログラムにデータを流し込んで処理します。
オブジェクト指向はプログラムにデータだけでなくプログラム情報も流し込み、下位のプログラムはデータと親のプログラムを駆使して処理をする。

■機械語的な回答
アセンブラにおいてはプログラムはデータの一種として扱いました。
ですからデータもプログラムも同じに扱います。
高級言語が発明された時、機械語は高級言語がプログラムがから自動生成し、データだけ扱うようにした。
ここにプログラムもデータとして扱えるようにしたもの。

■高級言語的な回答
クラスのように変数とメソッド(関数)をデータ定義できるようにしたもの。


オブジェクトオリエンテッドで説明できれば、各人の解釈だけある困った概念です。

bas********さん

2019/11/2217:24:03

オブジェクト指向っていうのは、「役割分担」することです。

OOP( オブジェクト指向 ) が考え出される前は、構造化プログラミングと呼ばれる手法でした。

でもこれはデータと処理は別物です。

func1関数があり、これが処理するのがたまたま変数a ...みたいな感じでした。

それを、データと処理(関数)をひとまとめにして、オブジェクトっていうのを作ります。そのオブジェクトに処理や管理を任せるというものです。

C言語では、ファイルに書き込む処理を考えると、

1. ファイルを開く( fopen関数 )
2. ファイルに書き込む ( 実際にやりたい処理 )
3. ファイルを閉じる ( fclose関数 )

という流れになります。

そして、このファイル情報を持つのが FILEポインタと呼ばれるものです。

fclose関数とかが処理するのがたまたまこのデータだった...みたいな感じです。

これをC++として、クラス化してみます。

FileWriter っていうクラスを設けて、メンバ変数 ( ほかの言語なら フィールド ) として FILEポインタを保持し、コンストラクタ ( initialized とか? ) やデストラクタでファイルを開いたり閉じたりするとしたら、

FileWriter file( "ファイル名" ); // インスタンス化
file.write( "書き込むデータ" );

とできる。そうすると、file オブジェクト = ファイル とみなせる。

つまり、オブジェクトだけが処理やデータ(及びその変移)を知っているので、

ある意味、人事部が販売部の売り方は知らなくても「違法性がないこと」と「売上が出ていること」があればいい。
みたいな感じです。

そのための指標を決めるのがクラスで、実際に処理するのがオブジェクト...っていう感じです。

dr_********さん

2019/11/2212:32:00

カードゲームにデッキってあるやん

あれがまさにパッケージシステムやオブジェクト指向

現実世界にあるものを観察してると
ああこれか!
とハマるものが必ずある

ソフトウェアの世界、仮想世界ってのは単に現実世界を模倣したものに過ぎないんやからね

プロフィール画像

カテゴリマスター

kin********さん

2019/11/1822:19:09

クラスというのは「データ構造とメソッドを一体にしたもの」と理解してください。

例えば数学の問題をオブジェクトにするなら
・問題文
・設問形式(選択式、複数選択、穴埋め順序問題など)
・選択肢
・正解
・解説
・配点
たとえばこんなようなデータ構造を設計し、1問=1インスタンスで持てば良いでしょう。

メソッドというのは
・回答選択肢を入力すると、正答か誤答かを返す
・回答選択肢を入力すると、得点を返す
・解説を表示する
こんな機能が考えられます。

e-ラーニングのシステムだとすると「テスト実施管理クラス」みたいなものもあるかもしれません。
・ユーザID
・開始日時
・制限時間
・テスト内容の定義(=複数の問題の配列)
・現在の回答状況(何問目まで進んでいるか)
・現在の得点状況
みたいなデータがあって
・開始
・中断
・再開
・テスト終了
なんかのメソッドがあるかもしれません。

プロフィール画像

カテゴリマスター

原沢信道さん

2019/11/1809:13:02

オブジェクト指向プログラミングは機械語には無いので、CPUが理解出来る物では無く、人間にも理解が難しいやっかいな物です。なので、理解しようとすれば必ず壁にぶち当たりますので、理解する事よりも、どの様に書けば良いのかだけを理解された方が良いです。一般的なオブジェクト指向プログラミングは全てがクラスに所属する必要が有りますが、Rubyの場合はクラスに所属していないプログラムからスタートするように成っています。クラス分けに関しても明確なルールは存在していないので、どの様に分けるかは自由ですので、初心者にはかなり荷が重い事になっています。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる