2010-01-11 15 views
25

UML wird am häufigsten zum Modellieren von Systemen mit C++ verwendet. In meinen Projekten ist C die Implementierungssprache. Ich suche nach Ressourcen für UML-Strategien, die für C anwendbar sind. Ich möchte UML während des Entwurfs verwenden und die verschiedenen Aspekte des Systems darstellen.UML für C-Programmiersprache

+1

Meine Frage ist nicht, wie OOP in C getan werden kann. Dafür haben wir viele Methoden wie www.state-machine.com/devzone/cplus_3.0_manual.pdf und www.planetpdf.com/codecuts/pdfs/ooc .pdf. Wie bereits erwähnt, möchten wir in C vielleicht nur Sequenzdiagramm und Komponentendiagramm verwenden. Ich suche nach Ressourcen, die diese Strategien beschreiben. Ich habe eine Idee wie, Datei repräsentiert ein Modul und es kann anstelle von Objekt im Sequenzdiagramm verwendet werden. Und ich zeige den Fluss zwischen verschiedenen Modulen mit dieser Strategie. – Andy

+0

Danke für die Links, Andy. –

Antwort

29

Ich kenne keine vorhandenen Ressourcen, die die Verwendung von UML speziell für C diskutieren. Wie andere bereits erwähnt haben, ist UML sprachunabhängig.

Bedenken Sie, dass Sie mit UML ein Modell für die Problemdomäne und ein anderes für die Implementierung haben können. Versuchen Sie, die Problemdomäne nicht als C, sondern als OO auf hoher Ebene zu modellieren. Sobald Sie die Problemdomäne ausreichend verstanden haben, können Sie mit der Modellierung einer Implementierung beginnen.

Aus verfahrenstechnischen Stil C-Implementierungen Modellierung, könnten die folgenden Diagramme nützlich sein:

  • Klassendiagramm:
    • anzeigen C-Modul APIs
    • anzeigen C-Modul Beziehungen (vor allem für Nicht-Abhängigkeiten OO)
    • Strukturen und Aufzählungen anzeigen (mit < < Stereotyp>>)
  • Paketdiagramm: Inhaltsverzeichnis einsehen (Module) von Bibliotheken, und die Abhängigkeitsbeziehungen zwischen Bibliotheken
  • Aktivitätsdiagramm: FlussdiagrammeStencils nicht-triviale Algorithmen
  • Sequence/Kollaborationsdiagramm: Zeigen Sie, wie Ereignisse/Nachrichten zwischen den Modulen/Einheiten/Ein-/Ausgaben erfolgen in der Zeit
  • Statechart-Diagramm: Für State-Maschinen, natürlich!

Erweiterung in Klassendiagrammen können Sie "Missbrauch", um sie in der folgenden Art und Weise für verfahrens Stil C:

  • Globale extern Funktionen -> öffentliche Methoden
  • Lokale statische Funktionen -> private Methoden
  • globale Variablen extern -> öffentliche Mitglieder
  • Lokale statische Variablen -> private Mitglieder
  • Structs -> Klasse mit "Struktur" stereotyp e
  • #define Konstanten -> Klasse mit "Aufzählung" Klischee

Experiment, und Sie werden Ihre eigenen Konventionen für missbrauchen UML finden.

6

Das Problem mit C ist, dass es eher eine prozedurale Programmiersprache ist. Es ist schwieriger, das feinkörnige Design mit einer C-Anwendung zu erhalten. Wenn Sie mit C arbeiten, sollten Sie sich bei Sequenzdiagrammen und Komponentendiagrammen so verhalten, dass sie beschreiben und einen Überblick darüber geben, was vor sich geht, und nicht ein Diagramm der Abhängigkeiten und Interaktionen.

+0

C ist keine "funktionale" Programmiersprache. Ich glaube, der gesuchte Begriff ist "prozedural". – coobird

+0

Sie haben Recht, ich dachte ... funktioniert aber nicht Klassen = funktional ... aber nach der strengsten Definition ist es funktional ... es funktioniert: P – monksy

+1

Ich stimme zu, dass UML nicht gut geeignet ist für C , vorausgesetzt, dass UML von objektorientierter Denkschule abgeleitet wurde. Aber Sie * können * ein minimales, auf Beziehungen basierendes, verwässertes objektartiges Konstrukt in C zusammenfassen, indem Sie Strukturen verwenden, die Funktionszeiger enthalten ... obwohl Vererbung und Polymorphie nicht so einfach sind. In beiden Fällen ist UML in C –

5

Ein objektorientiertes Design ist unabhängig von der Sprache und Sie können Ihr System natürlich mit UML gestalten. Einige Tools wie Rhapsody ermöglichen auch Code-Generierung und Round-Trip, die wir für einige spezielle Projekte verwenden, in denen C++ keine Option ist. Wenn Sie Ihren Code manuell schreiben möchten, verwenden Sie eine Benennungskonvention wie Subsystem_Module_Class_Method, um Ihre Funktionen objektorientiert zu benennen und eine .c-Datei pro Klasse zu verwenden. Die Verwendung von C ist kein Hindernis für ein sauberes Design.

+0

Es ist kein Hindernis für sauberes Design ... aber Sie werden nicht das Abstraktionsniveau und Komponenten-Design haben wie bei einer OOP-Sprache. Das ist der Grund, warum OOPs erstellt wurden. – monksy

+0

OOP kann auch in C gemacht werden: GTK ist ein gutes Beispiel dafür. Es macht einen starken Gebrauch von Makros, ok, aber syntaktisch ist es ziemlich sauber. Ich stimme zu, dass andere Sprachen es besser in ihre Syntax integrieren und der Code sieht vielleicht etwas sauberer aus, aber mit C können Sie die gleichen Ziele erreichen. Abstraktion ist im Design, der Code reflektiert es mehr oder weniger gut. – jdehaan