Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Visual Studio 2013 Grundkurs

Klassendiagramme

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Klassendiagramme visualisieren in Visual Studio 2013 sämtliche Komponenten von bestehendem Quellcode grafisch. Dabei synchronisiert die Entwicklungsumgebung automatisch Code und Diagramm.
09:25

Transkript

Wenn das um das Schreiben und Verstehen von Code geht, gibt es ganz unterschiedliche Arten von Entwicklern. Die einen sagen, ich möchte Code selber schreiben, ich möchte komplett verstehen was dort steht und was dort für Code generiert wird und wie man sich in bestehende Einwendungen einarbeiten soll, die man nicht selber geschrieben hat, dann sagen die wegen auch, ich gucken mir das Ganze im Code an, ich komme da besser zurecht. Da gibt es auch viele andere, mich zum Beispiel mit eingeschlossen, die eher so der grafische Typ sind und die einfacher Dinge erfassen können, wenn sie grafisch Visualisiert werden. Eine Möglichkeit bei objektorientierten Klassenstrukturen so etwas zu visualisieren sind Klassendiagramme. Klassendiagramme kann ich im Visual Studio mit Hilfe der Klassendiagramme, ha ha, wer hätte das gedacht, visualisieren und diese Klassendiagramme im Visual Studio haben die Besonderheit, dass sie ständig den Code und das Klassendiagramm synchron halten. Das heißt, ich kann mir aus Code ein Klassendiagramm generieren lassen, kann in diesem Klassendiagramm arbeiten und im Hintergrund wird mein Code die ganze Zeit verändert. Dieses Feature gibt es schon seit vielen vielen Jahren im Visual Studio und es ist einfach super genial, es ist super zuverlässig und es macht einfach Spaß damit zu arbeiten. Ich habe es jetzt, eigentlich seit diesem ersten Tag, seit es eingeführt wurde im Einsatz und ich habe noch nie das Problem gehabt, wie zum Beispiel bei anderen Tools, dass man inkonsistenten Daten hat, das heißt, ich habe ein Klassendiagramm, was nicht synchron ist mit meinem Code oder umgekehrt, es heißt,es ist wirklich ein sehr sehr ausgereiftes und sehr sehr stabiles Feature und dieses Feature schauen wir uns jetzt mal an in diesem Video. Ich habe hier ein Projekt und in diesem Projekt habe ich verschiedene Klassen unter anderem ein Interface, in der Program.cs ist natürlich auch eine Klasse definiert und das wollen wir uns einfach mal visualisieren. Standardmäßig gab es früher, in früheren Visual Studio Versionen hier einen entsprechenden Eintrag, der gesagt hat bitte Klassendiagramm anzeigen den gibt es mittlerweile nicht mehr. Ich muss jetzt hingehen und von Hand sagen, okay, ich möchte ein neues Element hinzufügen, habe dann hier die Liste meiner Visual C#-Elemente und dort suche ich mir einfach nach "diag" und dann wird mir hier direkt als zweites das Klassendiagramm angezeigt. Ich kann dem Ganzen einen Namen geben oder ich lasse es auch und füge das Klassendiagramm jetzt einfach mal hinzu und dann habe ich hier ein neues Fenster, die Klassendetails die gehören zum Klassendiagramm und ich docke das jetzt mal gerade in kurz temporär hier unten an und hier sehen wir jetzt das Klassendiagramm. Momentan ist in diesem Klassendiagramm noch nicht vorhanden, aber deshalb, weil wir noch keine Klasse hinzugefügt haben. Wir haben jetzt dabei zwei Möglichkeiten wie wir damit arbeiten. Entweder wir nehmen eine bestehende Klasse hier und ziehen diese Klasse auf unser Klassendiagramm per Drag and Drop und lassen es los und dann können wir hier diese Klasse weiter verändern oder eben halt grafisch visualisieren oder ich füge ien neue Klasse hinzu. Das heißt ich gehe hier oben in die "Ansichten" und füge als erstes mal den Werkzeugkasten hinzu, der befindet sich jetzt noch in einem anderen Fenster, ich schiebe ihn gerade mal rüber und docke hier an dieser Stelle an. So,und wenn ich jetzt neue Klassen erstellen wollte oder zum Beispiel eine Schnittstelle hier dann könnte ich diese einfach per Drag and Drop auf die Oberfläche ziehen, könnte dem Ganzen einen Namen geben, "IFoo" zum Beispiel und hier sieht man, wird gleich im Hintergrund die passende Klasse angelegt. So jetzt habe ich also diesen Datentypen IFoo erstellt und hier unten in den Klassendetails kann ich jetzt Member zu dieser Schnittstelle hinzufügen. Ich kann jetzt also hier eine Methode DoFoo machen, eine Methode DoBar und die Methode DoBar hat jetzt mal Integer Parameter und einen Integer Rückgabewert. Den Rückgabewert sehe ich hier an dieser Stelle, also sage ich mal das Ganze hat ein Integer Rückgabewert und wenn ich jetzt Parameter definieren möchte, kann ich an der Stelle hier sagen, okay, ich füge jetzt mal einen Parameter z1 hinzu, der ist ebenfalls von Datentyp Integer und wir fügen noch einen Parameter z2 hinzu und dieser Parameter z2 ist vom Datentyp Double. So, das wäre jetzt also eine Methode mit entsprechenden Parametern und wir schauen uns mal die Implementierung an. Das machen wir entweder indem wir die Datei hier öffnen direkt oder ein Doppelklick auf die entsprechende Interface Komponente machen und dann landen wir in der Code Behind, man sieht genau das, was ich gerade definiert habe im Code, ist auch tatsächlich jetzt hier in der Klasse implementiert worden, das funktioniert also. Auch wenn ich Klassen habe mit bestehenden Code mit bestehenden Methoden, wenn ich hier Methoden umbenenne oder hinzufüge wird der Code im Hintergrund nicht irgendwie kaputt gemacht oder so, wie man das von anderen Klassendiagrammen kennt zum Beispiel im Bereich Eklipse sondern hier ist wirklich alles Synchron, es sind immer Safe Operations, das heißt, es wird niemals Code im Hintergrund irgendwie kaputt gemacht. So, für so eine Schnittstelle kann man natürlich jetzt nicht ganz so viel definieren, aber wir können noch weiter Eigenschaften oder Ereignisse definieren, wenn ich hier mal auf die Klasse gehe, dann sieht man an einer Stelle, okay, hier habe ich Methoden, Eigenschaften, Felder und auch gleichzeitig noch Ereignisse. Also hier haben wir zusätzlich die Felder dazu, kann man in Interfaces standardmäßig nicht definieren, weil Interfaces nur eine Kontaktbeschreibung sind. So jetzt möchte ich, dass Sie das Interface IFoo von meiner Class1 implementiert wird. Das könnte ich jetzt im Code machen, indem ich sage ":IFoo", also ich implementiere dieses Interface oder ich mache das Ganze im grafischen Designer und ich ziehe jetzt hier diesen Vererbungspfeil auf der linke Seite von meinem Klassendiagramm per Drag and Drop auf meine Schnittstelle IFoo und damit sieht man hier oben an diesem kleinen Lollipop, implementiert diese Klasse jetzt hier entsprechend IFoo. Das ist so die Hauptarbeitsweise die man in diesem Klassendiagramm machen kann. Also ich nutze es meistens um schnell irgendwelche Klassenstrukturen zu generieren und um diese Klassenstrukturen zu designen. Und zum Designen muss man natürlich auch Klassen haben, die entsprechend irgendwelche Abhängigkeiten untereinander haben. Und wenn wir jetzt hier Class 1 und Class 2, und ich ziehe jetzt mal hier Class2 hinein und in Class 2 sieht man sind mehrere verschiedene Datentypen definiert, das heißt, es ist eine cs-Datei in der cs-Datei sind mehrere Klassen definiert. Ich lösche jetzt mal alles, bis auf die Class2 und ich möchte jetzt mal eine Abhängigkeit hier zwischen modellieren, weil ich hatte eben gesagt, verstehen von objektorientierten Systemen ist eine schwierige Herausforderung für einen Entwickler und das Ganze kann man verbessern und kann man unterstützen, indem man zum Beispiel sowas wie Abhängigkeiten visualisiert. Hier ist die erste Abhängigkeit visualisiert, dass unsere Class1 hier die Schnittstelle IFoo implementiert. Jetzt wollen wir aber auch mal normale Abhängigkeiten visualisieren, das heißt Class1 verwendet zum Beispiel Class2, weil dort irgendwie eine Methode aufgerufen wird. Wir haben hier noch keine Methode, wir sagen mal Class2 möchte Class1 benutzen. So das heißt, wir müssen jetzt in Class2 ein Property haben vom Typ Class1. Das kann ich auf zwei verschiedene Arten machen. Entweder füge ich hier ein Property hinzu und sage es ist vom Typ Class1 oder ich mache die bequemere Variante und sage hier, ich habe eine Zuordnung von meiner Class2 auf meine Class1. Diese Zuordnung heißt im Hintergrund einfach, dass in Class 2 ein Property implementiert wird und dieses Property hat den Datentyp Class1. Und man sieht jetzt hier sehr schön, dass dieses Property an der Stelle angezeigt wird als so eine Art Verbindungspfeil von Class2 zu Class1. Ich sehe also direkt mit einem Blick an der Stelle, was die Abhängigkeiten innerhalb dieser Klasse sind. Natürlich werden nicht alle Abhängigkeiten dargestellt. Ich habe jetzt hier zum Beispiel auch eine Abhängigkeit, aber ins .NET Framework zum Datentyp Integer. Wenn ich jetzt hier noch ein weiteres Property hätte, zum Beispiel Class3 und das wäre vom Datentyp Class3, wir haben gerade gesehen, der existiert innerhalb unseres Systems, Da hätte ich jetzt hier dieses Property und wenn ich das Ganze über das Property Window hinzufüge oder im Code Behind, wird standadmäßig nicht sofort diese Abhängigkeit auf der Oberfläche dargestellt. Wenn ich diese Abhängigkeit darstellen möchte, mache ich hier ein Rechtsklick auf das entsprechende Property und sage "Als Zuordnung anzeigen". Im Moment wo ich da mache, fügt er diese Klasse im Diagramm hinzu und zeichnet mir entsprechend diesen Abhängigkeitsfall zwischen diesen beiden Klassen. Wenn ich jetzt hier einen Blick auf das Diagramm werfen würde, würde ich sofort sehen, aha, Class2 hat Abhängigkeiten zu Class1 und Class3 und wenn die restlichen Member entsprechend gut benannt sind und die Klassen natürlich auch, dann erleichtert das dieses Verständnis von solchen objektorientierten Systemen enorm. Das heißt, dieses Klassendiagramm könnte man auch super zu Dokumentation verwenden. Stellen wir uns vor diese Bibliothek hier wäre eine entsprechende Komponente in unserem Softwaresystem, dann könnte man die wenigen Klassen und Interfaces, außer die Datentypen in diesem Projekt irgendwie organisieren, ordnen und direkt im Root-Folder ein Klassendiagramm legen, was eben diese objektorientierte Struktur in diesem Projekt visualisiert. Wenn jemand anderes, der diese Komponente nicht geschrieben hat in das Projekt kommt braucht er nur in die Komponente gehen, man könnte es als Kodierrichtlinie zum Beispiel festlegen, dann weiß er, okay, im Root-Folder innerhalb von meinem Projekt liegt immer ein Klassendiagramm, das öffne ich und dann sehe ich diese objektorientierte Struktur, die in dieser Komponente implementiert ist. Wie gesagt, das ist ein sehr sehr mächtiges Werkzeug und arbeiten Sie einfach mal ein bisschen damit. Wozu es sich auch sehr gut eignet ist, wenn man am Anfang eine Programmiersprache lernt, kann man natürlich sagen, okay, ich entferne jetzt mal alles hier aus diesem Klassendiagramm. Entfernen heißt nur, dass es hier auf dem Diagramm entfernt wird, nicht in der Code Behind. Man sieht jetzt hier dieses Interface IFoo, was wir hinzugefügt haben ist nach wie vor noch vorhanden und wenn ich jetzt Programmieren lernen möchte,kann ich natürlich das Ganze auch auf dieser Ebene machen, das heißt, wenn ich ausgehend von Klassen, von Objektorientierungen das Programmieren lerne, kann ich auch einfach sagen, okay, ich konzentriere mich erstmal nicht so auf die Kodierung, sondern mehr auf das Verständnis von Klassen und schmeiße jetzt einfach hier die Klassen drauf, modelliere das Ganze mit entsprechenden Interfaces ohne jetzt im Hintergrund Funktionalität zu hinterlegen und dann wird mir automatisch, wenn ich dann eben mit meinem Modelliervorgang fertig bin, im Hintergrund diese Klassengerüste generiert. Das kann man so machen, muss man aber so nicht machen. Wenn man jetzt sagt, ich möchte nur das Programmieren lernen, und nicht nur das objektorientierte Design, dann sollte man hier von Abstand nehmen, weil in dem Moment wo ich jetzt hier meine Methoden, Eigenschaften und Felder generieren lasse von meinem Klassendesigner, funktioniert das natürlich, aber wenn man wirklich den Syntax einer Sprache lernen möchte kann man eigentlich besonders am Anfang solche Konstrukte wie Eigenschaften, Felder, Events, Delegates und wo weiter nicht oft genug selber schreiben und deswegen sollte man da von Generieren von diesem Code Abstand lernen. Deswegen meine Empfehlung für die Verwendung des Klassendesigners, wenn Sie schon Erfahrung in der Entwicklung haben, nutzen Sie es zur Dokumentation, nutzen Sie es,besonders wenn Sie am Anfang eine Komponente neu bauen zum Designen und dan aufsetzen auf diesen Klassengerüsten, die erstellt wurden und wenn Sie neu in der Programmierung sind, schauen Sie erstmal die Sprache an, lernen Sie die Sprache wirklich, lernen Sie alle Konstrukte und nutzen Sie dann das Klassendiagramm, um objektorientierte Systeme besser zu verstehen und solche Systeme designen zu können.

sehr hilfreich
André S.

Vielen Dank für den Überblick. Ich komme vom Delphi und habe VS schon ein paar Wochen im Test. Dennoch ist der Überblick sehr hilfreich, da man natürlich viele Möglichkeiten, die VS bietet, am Anfang einfach übersieht...

 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!