Gibt es bekannte Entwurfsprinzipien, Best Practices und Entwurfsmuster, denen man beim Entwerfen eines C-Projekts folgen kann? Oder nützliche Gestaltungsprinzipien für die prozedurale (imperative) Programmierung im Allgemeinen?
(Ich bin ein Kind der 'objektorientierten Generation' und muss zum ersten Mal ein großes C-Projekt entwerfen.)
c
design-patterns
principles
Dimi
quelle
quelle
Antworten:
Verstecken von Informationen - wie von Parnas ( Software Fundamentals ) unterstützt.
Sorgfältige Verwaltung von Headern und Sichtbarkeit:
Der Header ist selbstgeschützt - es spielt also keine Rolle, ob er mehrmals enthalten ist.
Entwerfen Sie Funktionssätze, um an 'Objekten' (normalerweise Strukturen) zu arbeiten - und verwenden Sie diese Funktionen, anstatt die Innereien der Struktur in dem Code zu durchsuchen, der sie verwendet. Betrachten Sie es als selbst auferlegte Kapselung.
quelle
Meine drei Ratschläge:
Hier ist ein Beispiel:
quelle
malloc
.Es gibt ein gutes, kostenloses Online-Buch mit dem Titel Objektorientierte Programmierung mit ANSI-C , das das Thema des Schreibens von objektorientiertem Code in C behandelt. Eine Google-Suche nach "objektorientiertem C" liefert auch eine Reihe anderer Vorteile Beispiele und Ressourcen.
Wenn Ihr Projekt sicherheitskritisch ist, ist MISRA-C ein gutes Regelwerk. Es ist hauptsächlich für Embedded C gedacht, kann aber auch in anderen Bereichen nützlich sein.
Ich betrachte mich als OO-Codierer und arbeite viel mit Embedded-C. Der beste Rat, den ich geben kann, insbesondere bei großen Projekten, ist, es nicht zu übertreiben. Das Erstellen eines vollständigen OO-Frameworks auf ANSI C kann sehr verlockend sein, erfordert jedoch viel Zeit und Mühe, um es richtig zu machen. Je ausgefallener Sie werden, desto mehr Zeit verbringen Sie mit dem Debuggen Ihres Frameworks, anstatt am eigentlichen Projekt zu arbeiten. Gehen Sie die Aufgabe mit einem klaren Kopf und einem guten, soliden Verständnis von YAGNI an . Viel Glück!
quelle
{ }
Block) deklarieren müssen . Dieser beißt mich immer ein oder zwei Mal:)
OOP ist eine Methodik, keine Technologie. Mein erster Rat ist also, es nicht mehr als prozedurale Programmierung zu betrachten.
In Bezug auf e.James möchten Sie nicht versuchen, eine objektorientierte Sprache neu zu erstellen oder so zu tun, als hätten Sie die entsprechenden Funktionen. Sie können immer noch alles richtig machen, indem Sie sich an ein paar einfache Prinzipien halten:
quelle