Die MFC hat alle Klassennamen, die mit C beginnen. ZB CFile und CGdiObject. Hat jemand es anderswo benutzt gesehen? Gibt es ein offizielles Benennungskonvention Handbuch von Microsoft, das diesen Stil empfiehlt? Ist die Idee mit MFC entstanden oder war es ein anderes Projekt?
Etwas ähnliches wird in Symbian C ++ verwendet, wo die Konvention lautet:
T-Klassen sind "Werte", zum Beispiel TChar, TInt32, TDes
R-Klassen sind Handles für Kernel (oder andere) Ressourcen, zum Beispiel RFile, RSocket
M Klassen sind Mixins, die Interfaces enthalten (die als Mixins ohne Funktionsimplementierungen interpretiert werden). Die Richtlinie besagt, dass die Mehrfachvererbung höchstens 1 Nicht-M-Klasse umfassen sollte.
C-Klassen sind so ziemlich alles andere und stammen von CBase ab, die einiges an Ressourcen enthält, um den Umgang mit Ressourcen zu erleichtern.
HBufC existiert hauptsächlich, um verwirrte Beiträge in Symbian-Foren zu generieren, und sein eigenes Präfix ist nur der Anfang. Das H steht für "huh?", Oder möglicherweise "Haw, haw! Du hast keine STL!" ; -)
Dies entspricht eher der Ungarischen Notation von Apps als der Ungarischen Notation von Systemen. Das Präfix sagt etwas über die Klasse aus, die Sie in der Dokumentation nachschlagen könnten, von der Sie aber nichts wissen würden. Der Hauptpunkt der Benennung von Dingen in der Programmierung ist, solche Hinweise und Erinnerungen zu geben , andernfalls würden Sie einfach Ihre Klassen "Class001", "Class002", etc. nennen.
Systems Ungarisch sagt Ihnen nur den Typ einer Variablen, worüber IMO nichts besonders aufregend ist, besonders in einer Sprache wie C ++, wo Typen entweder ständig wiederholt oder durch Template-Parameter komplett verdeckt werden. Sein Analogon bei der Benennung von Typen ist die Java-Praxis, alle Schnittstellen mit I zu benennen. Auch hier bin ich nicht besonders begeistert (und auch nicht die Standard-Java-Bibliotheken), sondern wenn Sie für jede Klasse eine Schnittstelle definieren , zusätzlich zu den Schnittstellen, die tatsächlich für Polymorphie in Nicht-Test-Situationen verwendet werden, dann brauchen Sie eine Möglichkeit, die beiden zu unterscheiden.
Es ist böse. Verwenden Sie keine ungarische Notation für alles andere als abstrahierte Dinge.
Zum Beispiel ist btnSubmit
in Ordnung, um eine Schaltfläche mit dem Namen "Submit" zu beschreiben (mit einem lblSubmit
für die Beschriftung neben der Schaltfläche)
Aber Dinge wie CMyClass
für Class und uiCount
für unsigned Integer namens count helfen Programmierern nicht und führen nur zu extra verschwenderischem Tippen.
Das war ein alter C ++ - Codierungsstil und MFC war wahrscheinlich eines der letzten Dinge, die es brauchten.
Es war normalerweise nur eine Konvention von C ++ (und vielleicht ein paar andere Sprachen) und daher begann es in Ungnade zu fallen, als die Sprachen durch COM und dann .NET interoperabler wurden.
Sie sehen immer noch, es ist Cousin, das "Ich" Präfix für Schnittstellen, ziemlich oft. Ich fand es immer interessant, dass "ich" überlebte, als "C" starb, aber das lag wahrscheinlich daran, dass Schnittstellen in der COM-Interoperabilität so stark genutzt wurden.
Vor Jahren ist die Benennungskonvention entscheidend, um die Klasse, den Typ selbst der Gruppierung der Klasse zu identifizieren. Vergessen Sie nicht, damals gab es keinen Namensraum und keine / begrenzte Intellisense verfügbar. C ist eine Form der ungarischen Notation, wurde aber sicherlich von MFC populär gemacht. Borland und Delphi verwendeten T - als Präfix für Typ
Ich erinnere mich, dass Borland-Compiler mit Bibliotheken kamen, in denen Klassennamen mit "T" begannen. Wahrscheinlich für "type":)
Während MFC und viele für Windows geschriebene Software die "C" -Konvention für Klassen verwenden, finden Sie diese in der Regel nicht in Software, die für UNIX-Plattformen geschrieben wurde. Ich denke, es war eine Gewohnheit, die von Visual C ++ sehr stark gefördert wurde. Ich erinnere mich, dass Visual C ++ 6.0 allen Klassen, die mit dem Klassenassistenten erstellt wurden, ein "C" voranstellte.
Solche Konventionen für Variablen sind nützlich für Sprachen wie Fortran, wo Sie die Typen Ihrer Variablen nicht deklarieren müssen, bevor Sie sie verwenden. Ich erinnere mich, dass Variablen, deren Namen mit "i" oder "j" beginnen, standardmäßig auf ganze Zahlen und Variablen, deren Namen mit "r" beginnen, und andere Buchstaben auf reale (float) Werte gesetzt wurden.
Dass Menschen ähnliche Sprachen für Sprachen verwenden, in denen Sie Variablen deklarieren müssen - oder für Klassendefinitionen - ist wahrscheinlich nur ein Relikt von jemandem, der die alten Code-Konventionen von Sprachen wie Fortran missversteht, wo es wirklich darauf ankam.
Beim Schreiben von Anwendungen, die die Qt-Bibliotheken verwenden, verwenden wir eine Benennungskonvention, die Klassen, die direkt oder indirekt von QObject abgeleitet sind, von Klassen unterscheidet, die dies nicht tun. Dies ist nützlich, weil Sie anhand des Klassennamens erkennen können, ob Signale / Slots, Eigenschaften und alle anderen Goodies von QObject unterstützt werden.
Tags und Links c++ visual-c++ mfc hungarian-notation