Die direkte Bibliotheksintegration bietet Kontrolle über Graphmodell, Layout und Ausgabe, verlangt aber eine saubere Ressourcenverwaltung und eine klare Abgrenzung zur übrigen Anwendung.
Das Seminar entwickelt schrittweise eine gekapselte Integrationsschicht. Neben typischen API-Aufrufen stehen Fehlerpfade, Speicherfreigabe, Build-Konfiguration, Testbarkeit und sichere Verarbeitung nicht vertrauenswürdiger Eingaben im Mittelpunkt.
Inhaltsverzeichnis
- Seminarprofil und Zielsetzung
- Zielgruppe
- Voraussetzungen
- Lernziele
- Seminarinhalte
- Praxisübungen und Qualitätskontrollen
- Arbeitsweise im Seminar
Seminarprofil und Zielsetzung
Viertägige Entwicklerschulung zur direkten Einbettung von Graphviz über libcgraph und libgvc. Behandelt werden Aufbau und Änderung von Graphen, Attribute, Parsing, Layoutkontexte, Rendering in Dateien und Speicher, Plugin-Auswahl, Ressourcenlebenszyklus, Fehlerbehandlung, Threading-Grenzen, Build-Integration, Tests und eine gekapselte Anwendungs-API.
Zielgruppe
- C- und C++-Entwickler
- Entwickler nativer Anwendungen und Dienste
- Bibliotheks- und Plattformarchitekten
- Entwickler technischer Visualisierungssysteme
Voraussetzungen
Gute Kenntnisse in C oder C++, Zeigern, Speicherverwaltung, Build-Systemen und Fehlerbehandlung. DOT-Grundkenntnisse werden vorausgesetzt.
Lernziele
- Graphen mit libcgraph erzeugen, lesen, verändern und schließen.
- Attribute und Objektidentitäten über eine gekapselte Schnittstelle verwalten.
- Layout und Rendering mit libgvc korrekt steuern.
- Ressourcen, Fehler und Plugin-Abhängigkeiten sicher behandeln.
- Eine testbare Integrationskomponente für Anwendungen oder Dienste entwerfen.
Seminarinhalte
Kapitelinhaltsverzeichnis
- Bibliotheksarchitektur und Build-Voraussetzungen
- Graphen mit libcgraph erzeugen
- DOT lesen, prüfen und verändern
- Attribute und Zeichenkettenlebenszyklus
- Layoutkontext mit libgvc
- Rendering in Datei und Speicher
- Fehlerbehandlung und Ressourcenordnung
- Nebenläufigkeit, Prozessgrenzen und Sicherheit
- Testbare Integrationsschicht
1. Bibliotheksarchitektur und Build-Voraussetzungen
libcgraph verwaltet Graphstrukturen und DOT-Ein-/Ausgabe, während libgvc Layout- und Renderkontexte bereitstellt. Include-Pfade, Linkbibliotheken, Laufzeitplugins und Plattformunterschiede werden getrennt betrachtet.
Schritt-für-Schritt
- Header, Bibliotheken und Laufzeitplugins inventarisieren.
- Minimales Build-Projekt mit Versionsprüfung anlegen.
- Link- und Laufzeitpfade auf dem Zielsystem testen.
- Fehlende Abhängigkeiten mit einem kleinen Diagnosetool erkennen.
- Build-Konfiguration für Debug und Release dokumentieren.
2. Graphen mit libcgraph erzeugen
Graphen werden geöffnet, Knoten und Kanten über eindeutige Namen angelegt und am Ende geschlossen. Eine Anwendungsschicht kapselt Namen, Sichtbarkeit und Fehlerbehandlung, damit keine rohen Zeiger unkontrolliert verteilt werden.
Schritt-für-Schritt
- Gerichteten und ungerichteten Graphen anlegen.
- Knoten mit stabilen internen IDs erzeugen.
- Kanten anlegen und Mehrfachkanten bewusst behandeln.
- Subgraphen und Cluster modellieren.
- Graph in DOT serialisieren und Ressourcen schließen.
3. DOT lesen, prüfen und verändern
Bestehende DOT-Daten können geparst und anschließend über das Objektmodell untersucht oder angepasst werden. Eingabefehler und unerwartete Attribute müssen ohne Ressourcenverlust behandelt werden.
Schritt-für-Schritt
- DOT aus Datei und Speicherstrom einlesen.
- Parsefehler erfassen und kontrolliert abbrechen.
- Knoten, Kanten und Subgraphen traversieren.
- Elemente ergänzen, Attribute ändern und Teilmengen markieren.
- Geänderten Graphen kanonisch ausgeben.
4. Attribute und Zeichenkettenlebenszyklus
Attribute werden als Zeichenketten verwaltet und besitzen Gültigkeitsbereiche für Graph, Knoten oder Kante. Standardwerte, fehlende Attribute und Bibliothekseigentum an Speicher müssen eindeutig behandelt werden.
Schritt-für-Schritt
- Attributdefinitionen mit Standardwerten registrieren.
- Werte lesen, setzen und auf fehlende Werte prüfen.
- Graph-, Knoten- und Kantenattribute getrennt kapseln.
- Zeichenkettenkonvertierung und Lebensdauer dokumentieren.
- Ungültige oder nicht unterstützte Werte vor dem Layout abfangen.
5. Layoutkontext mit libgvc
Ein GVC-Kontext lädt verfügbare Plugins und führt den gewählten Layoutalgorithmus aus. Engine-Auswahl, Rückgabecodes und Freigabereihenfolge werden explizit gekapselt.
Schritt-für-Schritt
- GVC-Kontext erzeugen und Verfügbarkeit prüfen.
- Layoutengine anhand einer sicheren Auswahlliste bestimmen.
- Layout ausführen und Fehlerstatus auswerten.
- Positions- und Geometrieinformationen kontrolliert nutzen.
- Layout vor dem Schließen des Graphen freigeben.
6. Rendering in Datei und Speicher
Ausgaben können direkt in Dateien, Streams oder Speicherbereiche gerendert werden. Formatprüfung, Größenbegrenzung und eindeutig geregeltes Eigentum am Ausgabepuffer verhindern typische Fehler.
Schritt-für-Schritt
- Ausgabeformat gegen verfügbare Renderer prüfen.
- SVG und ein Rasterformat in Dateien rendern.
- Ausgabe in einen Speicherpuffer erzeugen.
- Puffergröße und Freigabefunktion korrekt behandeln.
- Fehlerhafte Zielpfade und nicht unterstützte Formate testen.
7. Fehlerbehandlung und Ressourcenordnung
Jeder API-Schritt kann fehlschlagen. Eine einheitliche Aufräumstrategie sorgt dafür, dass Graph, Layout, Kontext, Dateien und Puffer in jeder Abbruchlage korrekt freigegeben werden.
Schritt-für-Schritt
- Ressourcenlebenszyklus als Zustandsfolge modellieren.
- Fehlercodes in anwendungseigene Fehlerobjekte übersetzen.
- Aufräumpfade für jede teilweise Initialisierung implementieren.
- Diagnosemeldungen mit Kontext und Eingabebezeichner versehen.
- Fehlerszenarien mit automatisierten Tests provozieren.
8. Nebenläufigkeit, Prozessgrenzen und Sicherheit
Die Einbettung in Dienste erfordert klare Regeln für parallele Aufrufe, globale Bibliothekszustände, Zeitlimits und Ressourcengrenzen. Nicht vertrauenswürdige Graphen werden bevorzugt in kontrollierten Prozessgrenzen verarbeitet.
Schritt-für-Schritt
- Threading-Anforderungen der Anwendung erfassen.
- Kontexte und Graphen nicht unkontrolliert zwischen Threads teilen.
- Zeit- und Speichergrenzen für Renderaufträge definieren.
- Datei- und Bildzugriffe aus Eingaben einschränken.
- Für riskante Aufträge eine separate Prozessausführung vorsehen.
9. Testbare Integrationsschicht
Zum Abschluss wird eine kleine API entworfen, die Eingabedaten übernimmt, Engine und Format validiert, Layout und Rendering ausführt und ein strukturiertes Ergebnis zurückliefert.
Schritt-für-Schritt
- Öffentliche Schnittstelle und Fehlervertrag definieren.
- Bibliotheksdetails hinter internen Handles kapseln.
- Testdoubles für Dateisystem und Konfiguration vorsehen.
- Referenzgraphen und Fehlerfälle automatisiert testen.
- Beispielanwendung mit sauberem Start- und Endzustand erstellen.
Praxisübungen und Qualitätskontrollen
- Ein natives Minimalprogramm für Graphaufbau, Layout und SVG-Rendering erstellen.
- DOT einlesen, Attribute verändern und kanonisch wieder ausgeben.
- Rendering in einen Speicherpuffer mit korrekter Freigabe implementieren.
- Eine gekapselte C- oder C++-Schnittstelle mit Tests für Fehler- und Aufräumpfade entwickeln.
Arbeitsweise im Seminar
API-Erklärungen, C- und C++-Code-Labore, Debugging, Speicher- und Fehleranalysen sowie schrittweiser Aufbau einer Integrationskomponente.
Fachbereichsleitung / Leitung der Trainer / Ansprechpartner
-

Lucas Beich
Telefon: + 49 (221) 74740055
E-Mail: lucas.beich@seminar-experts.de -

Paul Goldschmidt
Telefon: + 49 (221) 74740055
E-Mail: paul.goldschmidt@seminar-experts.de
Seminardetails
| Dauer: | 4 Tage ca. 6 h/Tag, Beginn 1. Tag: 10:00 Uhr, weitere Tage 09:00 Uhr |
| Preis: |
Öffentlich oder Live Stream: € 2.396 zzgl. MwSt. Inhaus: € 6.800 zzgl. MwSt. |
| Teilnehmeranzahl: | min. 2 - max. 8 |
| Teilnehmer: | C- und C++-Entwickler, Plattformarchitekten und Entwickler nativer Visualisierungsanwendungen |
| Voraussetzungen: | Gute Kenntnisse in C oder C++, Zeigern, Speicherverwaltung, Build-Systemen und Fehlerbehandlung. DOT-Grundkenntnisse werden vorausgesetzt. |
| Standorte: | Stream Live, Inhaus/Firmenseminar, Berlin, Bremen, Darmstadt, Dresden, Erfurt, Essen, Flensburg, Frankfurt, Freiburg, Friedrichshafen, Hamburg, Hamm, Hannover, Jena, Kassel, Köln, Konstanz, Leipzig, Luxemburg, Magdeburg, Mainz, München, Münster, Nürnberg, Paderborn, Potsdam, Regensburg, Rostock, Stuttgart, Trier, Ulm, Wuppertal, Würzburg |
| Methoden: | Vortrag, Demonstrationen, praktische Übungen am System |
| Seminararten: | Öffentlich, Webinar, Inhaus, Workshop - Alle Seminare mit Trainer vor Ort, Webinar nur wenn ausdrücklich gewünscht |
| Durchführungsgarantie: | ja, ab 2 Teilnehmern |
| Sprache: | Deutsch - bei Firmenseminaren ist auch Englisch möglich |
| Seminarunterlage: | Dokumentation auf Datenträger oder als Download |
| Teilnahmezertifikat: | ja, selbstverständlich |
| Verpflegung: | Kalt- / Warmgetränke, Mittagessen (wahlweise vegetarisch) |
| Support: | 3 Anrufe im Seminarpreis enthalten |
| Barrierefreier Zugang: | an den meisten Standorten verfügbar |
| Weitere Informationen unter + 49 (221) 74740055 |
Seminartermine
Die Ergebnissliste kann durch Anklicken der Überschrift neu sortiert werden.
