Attualmente sto cercando di imparare C # e voglio migliorare la mia comprensione di Object Oriented Programming (OOP). Spero di ottenere questo risultato sperimentando un piccolo programma che tiene traccia dei miei compiti / informazioni sulla scuola. Ho costruito lezioni relative alle mie Istituzioni, Semestri (Termini), Corsi e Incarichi. La mia domanda è se ho creato e implementato correttamente le mie classi riguardo alle informazioni che rappresentano. Il mio pensiero suggerisce che le mie classi non dovrebbero ereditare l'una dall'altra in un genitore / figlio come la moda perché sono fisicamente non correlate. Tuttavia, l'accesso agli oggetti tramite elenchi a più livelli sembra poco pratico (credo). Esiste un modo migliore per farlo che non mi costringe ad accedere all'oggetto eseguendo iterazioni attraverso le raccolte, ma implementa ancora le best practice OOP?
Codice sorgente programma
Punto di ingresso / Principale
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);
}
Elenco classi
Ente
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));
}
}
Corso
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));
}
}
Assegnazione
class Assignment
{
public string Name { get; set; }
public Assignment(string UP_Name)
{
this.Name = UP_Name;
}
}