2011-05-23 2 views
1

je entités suivantes dans mon systèmecomment modéliser ce en orienté objet façon

public class Student 
    { 
     public Guid StudentId { set; get; } 
     public string StudentName { set; get; } 
     public virtual Course[] Courses { set; get; } 
    } 

public class Teacher 
    { 
     public Guid TeacherId { get; set; } 
     public string TeacherName { get; set; } 
     public virtual Course[] Courses { get; set; } 
    } 


public class Course 
    { 
     public Guid CourseId { set; get; } 
     public string CourseName { set; get; } 
     public Student[] Students { set; get; } 
     public Teacher Teacher { get; set; } 
     public Test[] Tests{ get; set;} 
    } 


public class Test 
    { 
     public Guid TestId { get; set; } 
     public String TestName { get; set; } 
     public int TotalMarks { get; set; } 
     public int PassingMarks { get; set; } 
    } 

Chaque étudiant peut souscrire à de nombreux cours et chaque cours peut avoir de nombreux étudiants

Chaque professeur peut enseigner plusieurs cours et chaque cours peut avoir un enseignant

chaque cours peut avoir de nombreux tests

par exemple, il y a un cours intitulé « Mathématiques » et cette dure 6 mois et au cours de ces six mois, plusieurs tests sont effectués

Qu'est-ce qui b la structure de données correcte si je veux stocker les données suivantes « Pour les notes des élèves S1 pour le test t1 » « Pour les marques de l'étudiant pour l'instant t2 test »

Je sais que je peux avoir une relation de plusieurs à plusieurs entre les tests et les étudiants, mais il y a déjà une relation plusieurs à plusieurs entre les étudiants et le cours et le cours contient Test.

+0

Est-ce un problème de devoirs? Si oui, devrait obtenir l'étiquette de devoirs. –

+0

non, Ce n'est pas un problème de devoirs :) Son mon projet Pet bien que :) –

Répondre

1

Vous devriez envisager d'avoir une classe, disons "Marques", qui contient la relation Étudiant -> Marquer et Marquer -> Test.

En général, lorsque vous effectuez une conception orientée objet, au niveau de ce domaine, vos classes et relations sont des noms et des verbes dans votre cas d'utilisation ou votre description. Dans ce cas, vous savez que votre étudiant a des notes; ceux-ci sont spécifiques à l'étudiant. L'étudiant n'a pas de tests, car ceux-ci ne sont pas créés ou contrôlés par l'étudiant.

Mise à jour

Oui, l'idée est que vous auriez une classe de marques, avec une relation étudiant à leurs marques; les marques auraient une relation avec son test. En d'autres termes, «un étudiant a des points pour un test» - ces choses sont naturellement dans le langage du problème une fois que vous apprenez à bien le regarder.

Donc ce serait quelque chose comme

class Student { // lots of other fields 
    marks : set of Marks // any convenient structure 
          // logically a Set because you wouldn't have the 
          // same marks assigned to a student twice 
} 

class Marks { // A Mark is the Student's score for a test 
    Score s; 
    Test t; 
    Student stud; // see below 
} 

class Test { // other information needed here too 
    marks : set of Marks 
} 

Maintenant, vous avez une structure de classes qui vous permet de demander: « Quelles sont les marques d'étudiants sur leurs tests? », Et de ce que vous pouvez demander « quelles étaient ces tests? " Dans l'autre sens, vous pouvez demander "Quelles notes ont été données pour ces tests?" et "Qui étaient ces étudiants?" C'est pourquoi Marks a besoin d'un back-relation avec Student.

Deux choses à noter:

(1) ceci est un modèle très courant dans une analyse OO - un grand nombre-plusieurs se transforme en une « classe d'aide » qui le représente.

(2) si vous allez ensuite mettre ceci dans une base de données, il y a un deuxième problème: la chose naturelle à faire est de faire de chaque classe une table séparée; ce schéma fonctionne bien si vous pouvez rechercher des éléments dans une table à un coût presque nul (disons en temps d'accès.) Dans une base de données réelle, vous devez frapper le disque plusieurs fois pour cet accès, et il devient lent. C'est ce qu'on appelle le "problème de discordance d'impédance relationnelle d'objet". Il existe un certain nombre de solutions qui impliquent la dénormalisation de la base de données, la création d'index ou de vues supplémentaires pour pré-calculer les relations ou la modification de votre modèle d'objet.

+0

que voulez-vous dire par cela "contient la relation étudiant -> Mark et Mark -> Test." –

+0

Voulez-vous dire que je vais avoir une classe appelée Marques qui contiendra deux propriétés Étudiant et Test –

+0

Merci beaucoup pour la réponse .. J'ai de nouveau revisité même genre de situation et votre réponse a beaucoup aidé –