I'm currently trying to learn C# and want to enhance my understanding of Object Oriented Programming (OOP). I'm hoping to accomplish this by experimenting with a small program that keeps track of my school assignments/information. I've constructed classes relating to my Institutions, Semesters(Terms), Courses, and Assignments. My question is whether or not I have created and implemented my classes correctly in regards to the information they represent. My thinking suggests that my classes should not inherit from one another in a parent/child like fashion because they are physically unrelated. However accessing objects through multilevel lists seems impractical (I think).. Is there a better way of doing this that doesn't force me to access object by iterating through collections, but still implements OOP best practices?
Program Source Code
Entry Point / Main
static void Main(string[] args)
{
List<Institution> Institutions = new List<Institution>();
Institutions.Add(new Institution("My college"));
Institutions[0].AddNewTerm("2016", "Spring");
Institutions[0].Terms[0].AddNewCourse("Math 210");
Institutions[0].Terms[0].Courses[0].AddNewAssignment("Chapter 1");
MessageBox.Show(Institutions[0].Terms[0].Courses[0].Assignments[0].Name);
}
Class List
Institution
class Institution
{
public string Name { get; set; }
public List<Term> Terms { get; set; }
public Institution(string UP_Name)
{
this.Name = UP_Name;
this.Terms = new List<Term>();
}
public void AddNewTerm(string NewTermYear, string NewTermSeason)
{
Terms.Add(new Term(NewTermYear, NewTermSeason));
}
}
Term
class Term
{
public string Name { get; set; }
public string Year { get; set; }
public string Season { get; set; }
public List<Course> Courses { get; set; }
public Term(string NewSeason, string NewYear)
{
this.Season = NewSeason;
this.Year = NewYear;
this.Courses = new List<Course>();
this.Name = (this.Season + " " + this.Year);
}
public void AddNewCourse(string NewCourseName)
{
this.Courses.Add(new Course(NewCourseName));
}
}
Course
class Course
{
public string Name { get; set; }
public List<Assignment> Assignments { get; set; }
public Course(string UP_Name)
{
this.Name = UP_Name;
this.Assignments = new List<Assignment>();
}
public void AddNewAssignment(string NewAssignmentName)
{
Assignments.Add(new Assignment(NewAssignmentName));
}
}
Assignment
class Assignment
{
public string Name { get; set; }
public Assignment(string UP_Name)
{
this.Name = UP_Name;
}
}