私はアプリケーションドメイン(公立高校)をオブジェクトとしてモデリングすることで初めてOOPを練習しています。クラス間の関係を作成する方法については、外部依存関係。Rubyでオブジェクト関係を構築するときに依存関係を分離する
私は構築したい関係がたくさんあるので、一般的な原則を学ぶことを願って、私が持っている難しさを説明するためにここで2つのクラスとサンプルオブジェクトを挙げています。
私には2つのクラスGrade
とTranscript
があります。 Transcript
の各インスタンスには、インスタンス変数@mark
があります。これは現在ストリングです。私は、各クラスのすべてのインスタンスをgrades
ハッシュとtranscripts
ハッシュを収集しました。
質問:@mark
が対応するGrade
インスタンスを参照するようにこれらのクラスを変更するにはどうすればよいですか?
Grade
は、すべての可能な最終学年の学生は学年ハッシュから
class Grade
attr_accessor :mark, :alpha_equivalent, :numeric_range_low, :numeric_range_high, :numeric_qquivalent, :pass_fail_equivalent, :description
def initialize(args)
@mark = args["Mark"]
@alpha_equivalent = args["AlphaEquivalent"]
@numeric_range_low = args["NumericRangeLow"]
@numeric_range_high = args["NumericRangeHigh"]
@numeric_equivalent = args["NumericEquivalent"]
@pass_fail_equivalent = args["PassFailEquivalent"]
@description = args["Description"]
end
end
サンプル・オブジェクトを受け取ることができるのインスタンスを持っている(または、ということは完全に間違ったアプローチである?):
grades["100"] =>
#<Grade:0x007f9fcb077d68
@alpha_equivalent="100",
@description="100 out of 100",
@mark="100",
@numeric_equivalent="100",
@numeric_range_high="100",
@numeric_range_low="100",
@pass_fail_equivalent="P">
Transcript
には、学生が過去に受けたすべてのコース転写産物のハッシュから学ん
class Transcript
attr_accessor :student_id, :last_name, :first_name, :grade, :official_class, :school, :year, :term, :course, :course_title, :mark, :pass_fail, :credits
def initialize(args)
@student_id = args["StudentID"]
@last_name = args["LastName"]
@first_name = args["FirstName"]
@grade = args["Grade"]
@official_class = args["OffClass"]
@school = args["school"]
@year = args["Year"]
@term = args["Term"]
@course = args["Course"]
@course_title = args["Course Title"]
@mark = args["Mark"]
@credits = args["Credits"]
@grade_entry_cohort = args["GEC"]
end
end
サンプルオブジェクト:
transcripts["foobar-COURSE1-100"] =>
#<Transcript:0x007f9fce8786b8
@course="COURSE1",
@course_title="Example Course",
@credits="5",
@first_name="FOO",
@grade="100",
@grade_entry_cohort="V",
@last_name="BAR",
@mark="100",
@official_class="000",
@school="1",
@student_id="0123",
@term="1",
@year="2000">
私はそれらを直接対処できるようにしたかったので、私はCSVソースファイルからすべてのオブジェクトをインスタンス化して、ハッシュにそれらを収集しています。
あなたが言った '|| = '演算子は本当に便利だと思います、ありがとう!私はメソッドを定義する2番目のアプローチを間違いなく使用したいと思いますが、私が直面している課題は、グレードに関する属性が 'Grade'クラスのインスタンスに含まれていることです。私が 'args'をトランスクリプトに送るとき、グレードの値は文字列です。 私がする必要があるのは、すべてのインスタンスのグレードを持つグレードのハッシュで正しいインスタンスを検索するためにargsの文字列を使用するメソッドを記述する方法です。 – zqe
基本的には私のプログラムには2つのソースファイルがあるので、すべての成績の意味に関する情報があり、もう1つは成績が – zqe
に更新されています。 – Zubin