2010-09-16 21 views
0

Quelqu'un peut-il me dire comment mapper l'agrégation et la composition en C#, en considérant les deux classes STUDENT et LECTURER.Mappage UML en C#

ma question peut ne pas être claire.Par exemple, j'ai utilisé le concepteur de classe VS pour générer la relation Association entre les classes. Considérons les 2 classes LECTURER et STUDENT_SOCIETY.Class Designer génère le code suivant. Blockquote

public class Lecturer 
{ 
    private string Name; 
    private string Specialization; 

    public StudentSociety StudentSociety 
    { 
     get 
     { 

     } 
     set 
     { 
     } 
    } 


} 

public class StudentSociety 
{ 
    private int Name; 
    private string NoOfMembers; 
} 

Alors même comment puis-je modéliser l'agrégation et la composition

+1

La question n'est toujours pas claire. Demandez-vous: (1) à quoi ressemblerait un modèle UML pour la composition/agrégation? (2) à quoi ressemblerait le code résultant si la relation modélisée était la composition/l'agrégation? Ou autre chose? Si c'est (2) voir la solution de @ FixerMark ci-dessous. – sfinnie

+0

En l'état, vous avez une relation d'agrégation car StudentSociety est externe à Lecturer, qui contient une fonction permettant d'assigner dynamiquement un objet Studentsociety. Pour le transformer en une relation composite, vous devez rendre le membre StudentSociety avec sa fonction get/set privée et faire de la classe StudentSociety une sous-classe de l'enseignant. (Vous devez également l'appeler autre chose que StudentSociety pour éviter toute confusion/conflit avec la classe du même nom) – FixerMark

+0

Le concepteur de classe VS n'est pas un outil UML. Il ne supporte pas l'agrégation ou la composition. –

Répondre

1

Généralement, la composition est permanente et représentée par une classe contenant une classe dans une autre alors que l'agrégation implique une sorte d'affectation ou de liaison.

Donc, en supposant que le conférencier est responsable d'un certain nombre de la composition des élèves serait quelque chose comme:

Public class Lecturer 
{ 
    public class Student 
    { 
     string mName = ""; 
... etc. 

Alors que l'agrégation pourrait être:

Public class Lecturer 
{ 
    ... Some code ... 
} 

Public class Lecturer 
{ 
    Student mStudent; 

    public void setStudent(Student theStudent) 
    { 
     mStudent = theStudent 
    } 

... etc. 

Laissez-moi savoir si je reçois un bon marquer pour vos devoirs ...;)

+0

typo - La première ligne de l'exemple d'agrégation devrait être Public Class Student (et non Lecturer). Réponse sinon bien. Cependant - du point de vue du domaine - je m'interrogerais encore sur la notion de conférencier «contenant» ou agrégeant des étudiants (selon les commentaires ci-dessus). – sfinnie

+0

Tout à fait vrai, il aurait dû être étudiant - cela va m'apprendre à couper et coller rapidement. – FixerMark

1

Plus d'informations nécessaires. Voulez-vous prendre votre modèle de domaine et le mapper dans un diagramme UML? Habituellement, cela se passe dans l'autre sens (diagramme d'abord, puis générer le modèle en tant qu'objets de code). Il n'y a rien de construit dans C# ou "vanilla" Visual Studio pour faire cela; Cependant, MS Visio (qui fait partie des installations Office de niveau professionnel) peut passer du diagramme au code et vice versa, et s'intègre à VS pour ce faire. Dernièrement j'ai travaillé avec Visio, ce n'était pas "pur" UML; les symboles du diagramme empruntés à une combinaison de schémas de diagrammes. Cependant, vous obtiendrez une représentation graphique lisible de votre modèle, et les modifications que vous y apporterez pourront être réémises en tant qu'objets de code. En ce qui concerne la détermination de la relation entre ceux-ci, elle est généralement plusieurs-à-plusieurs, le contexte unifiant pour une relation un-à-plusieurs utilisable étant une «classe» ou une «section» d'un «cours» ou "assujettir". Un seul cours a plusieurs sections. Chaque section a un conférencier et de nombreux étudiants. Le même étudiant peut fréquenter plusieurs sections et le même enseignant peut enseigner plusieurs sections. Cela signifie que le conférencier et l'étudiant peuvent avoir une liste de sections qu'ils enseignent/fréquentent (si vous avez besoin d'un modèle de domaine «bidirectionnel» où vous pouvez naviguer dans n'importe quelle direction autour du graphe d'objets).

+0

Visual Studio peut générer des diagrammes de classes à partir du code. Ils sont similaires aux diagrammes statiques UML. –

+0

D'accord avec @Keith. Vous ne mentionnez pas la nature de la ou des relations que vous tentez de capturer - ce qui est fondamentalement important. En supposant que ce soit sur le modèle de 'Maître de conférences enseigne à l'élève': (1) c'est généralement beaucoup: beaucoup (avec quelques intermédiaires) et donc (2) Agrégation/Composition ne sont généralement pas utiles pour ce type de relation. – sfinnie

+0

Merci pour les replys plz voir l'EDIT – chamara