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;
}
}
Best Answer
It's not bad for a newbie. You're right to be concerned about accessing objects through multilevel lists. Also, hard coding the indexes will hurt you eventually (but it's OK for now).
You might try changing
AddNewxxx()
to return what was added. For example, if you change Term's AddNewClass toin your
Main()
function you'll be able to do something likeand so on.
Be patient; there is a lot to learn.