Codingstandard. Softwareentwicklung Praktikum Stand: 27.02.2008



Ähnliche Dokumente
Vorkurs C++ Programmierung

Einführung in die Programmierung

Einführung in die Programmierung mit C++

Einführung in die C++ Programmierung für Ingenieure

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 18

Zählen von Objekten einer bestimmten Klasse

Einführung in die Programmierung (EPR)

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

12. Vererbung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Grundlagen. Kapitel 1

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

2. Semester, 2. Prüfung, Lösung

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Alltagsnotizen eines Softwareentwicklers

Die Programmiersprache C99: Zusammenfassung

Objektorientierte Programmierung für Anfänger am Beispiel PHP

.NET Code schützen. Projekt.NET. Version 1.0

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Tutorium Rechnerorganisation

Informationen zur Verwendung von Visual Studio und cmake

DLLs (dynamic loaded libraries) mit MingW erstellen

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Praxisorientierte Einführung in C++ Lektion: "Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm)"

Grundlagen der Informatik - 6. Praktikum

Übungen zu C++ Kapitel 1

Objektorientierung: Klassen und Objekte

13. Vererbung. Prof. Dr. François E. Cellier Informatik I für D-ITET (HS 2012)

Grundlagen von Python

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Interaktive Medien Richtlinien für das Codieren Version vom 18. Juni 2014

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 16

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Einführung in die Programmierung

Arbeiten mit UMLed und Delphi

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Einführung in Javadoc

Programmentwicklung mit C++ (unter Unix/Linux)

Objektbasierte Entwicklung

Dokumentieren mit Eclipse und Doxygen

Visual Basic Express erstes Projekt anlegen

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

Klausur in Programmieren

Klausur in Programmieren

affilinet_ Flash-Spezifikationen

C A R L V O N O S S I E T Z K Y. Boost C++ Libraries. Johannes Diemke. Department of Computer Science Learning and Cognitive Systems

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Unsere Webapplikation erweitern

Eine Einführung in C-Funktionen

teischl.com Software Design & Services e.u. office@teischl.com

Installation und Inbetriebnahme von Microsoft Visual C Express

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Angewandte Mathematik und Programmierung

Die LogTrace-Bibliothek

Anzeige von eingescannten Rechnungen

Rundung und Casting von Zahlen

SICHERN DER FAVORITEN

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

ACDSee 10. ACDSee 10: Fotos gruppieren und schneller durchsuchen. Was ist Gruppieren? Fotos gruppieren. Das Inhaltsverzeichnis zum Gruppieren nutzen

Anleitung über den Umgang mit Schildern

Lehrer: Einschreibemethoden

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Erfahrungen mit Hartz IV- Empfängern

XML-Namensräume. Marc Monecke

Erreichbarkeit von Klassenelementen. Daten verstecken und kapseln

Software Engineering Interaktionsdiagramme

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging

Internet Explorer Version 6

Algorithmen und Datenstrukturen

Klausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 13. April 2007, Uhr Bearbeitungszeit: 105 Minuten

5.2 Neue Projekte erstellen

Digital signierte Rechnungen mit ProSaldo.net

Propädeutikum. Dipl.-Inf. Frank Güttler

PVL 3 - Roulette. (5 Punkte) Abgabe bis

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

Deklarationen in C. Prof. Dr. Margarita Esponda

Java Kurs für Anfänger Einheit 5 Methoden

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Informatik I (D-MAVT)

Sichere Anleitung Zertifikate / Schlüssel für Kunden der Sparkasse Germersheim-Kandel. Sichere . der

Programmierkurs Java

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

How To: Wie entwickle ich mit SharpDevelop Anwendungen für die PocketPC-Platform

Native Zeichenketten (C-Strings)

Einführung in die C-Programmierung

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Anleitung zum Bestellformular für Visitenkarten UZH

5. Tutorium zu Programmieren

Menü auf zwei Module verteilt (Joomla 3.4.0)

Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Einleitende Bemerkungen

Transkript:

I. Einleitung II. Codingstandard Softwareentwicklung Praktikum Stand: 27.02.2008 Wie in der Vorlesung schon ausgeführt wurde, ist die Lesbarkeit und Wartbarkeit des Sourcecodes ein sehr wichtiges Kriterium für guten Code. Ein Coding Standard (CS) gibt nun Regeln vor, die darauf abzielen, die Lesbarkeit des Source Codes zu verbessern; neben generellen Anleitungen auch genaue Formatierungsregeln. Dies erleichtert die Lesbarkeit des Codes sowohl für die Entwickler selbst als auch für Unbeteiligte. Der für diese LV vorgegebene CS ist eine vereinfachte Version des von K. Schmaranz 1 in seinem Buch Softwareentwicklung in C++ verwendeten. Allgemeine Regeln Die Sprache des Source Codes und der Kommentare ist Englisch. Einfachheit: Im Englischen auch als KISS (Keep it small and simple) bekannt. Es ist eine sinnvolle Aufteilung anzustreben, sodass Funktionen _eine_ bestimmte Aufgabe erfüllen und keine Seiteneffekte haben. Die Aufgabe der Funktion spiegelt sich in deren Namen wieder. Verständlichkeit: Der Source Code sollte von anderen Personen bei einmaligem Durchlesen sofort verstanden werden können. Dazu ist vor allem eine sinnvolle Namenswahl für Funktionen und Variablen nötig (Beispiel: l ist kein guter Variablenname und daher nicht erlaubt. Besser lastname.) Einheitlichkeit: Ähnliche Codeteile sollen auch gleich aufgebaut sein. Zum Beispiel sollen verwandte Funktionen, wie append und remove, die Parameter in derselben Reihenfolge haben. Auch lokale Variablen für dieselbe Aufgabe sollen in allen Codeteilen gleich benannt werden. III. Detail Regeln Globale Variablen sind zu vermeiden. Kommentare sind als Zeilenkommentare anzugeben (Also mit // und nicht /*... */. Unnötige Kommentare sind zu unterlassen. Beispiel: int number = 5; // hier wird der Wert 5 zugewiesen Namenskonvention: Durch diese Namenkonvention wird erreicht, dass schon Aufgrund der Schreibweise klar ist, um welches Sprachkonstrukt es sich handelt. Klassen sowie typedef ed Enums, Structs und Unions Methoden und Funktionen Lokale Variablen Klassen und Instanz Member Variablen Konstanten (auch in Enum) Namespaces Exceptions (müssen mit Exception enden) Nicht typedef ed Enums, Structs, Unions AllWordsCapitalizedWithoutUnderscore firstwordlowercaserestcapitalizedwithoutunderscores all_lower_case_with_underscores all_lower_case_with_underscores_and_trailing_underscore_ ALL_UPPERCASE_WITH_UNDERSCORES AllWordsCapitalizedWithTrailingUnderscore_ AllWordsCapitalizedWithoutUnderscoreEndsWithException _AllWordsCapitalizedWithUnderscoresOnBothEnds_ 1 Klaus Schmaranz. Softwareentwicklung in C++, Kapitel Coding-Standard. Springer, 2001. Seite 1

Jede Klasse besteht aus einem Header (klassenname.h) und dem Code (klassenname.cpp). Eine Implementation im Header ist nicht erlaubt außer: Sehr kleine Klassen die logisch zusammengehören wie zum Beispiel die Exceptions eines Moduls können in einem Header und cpp Datei Paar zusammengefasst werden (Bsp.: input_exceptions.h und input_exceptions.cpp). Bei Templates ist die Trennung Header und Code Datei wegen Compiler Inkompatibilitäten nicht nötig. Statt C Casts sind nur die entsprechenden Casts aus C++ zu verwenden. Jede Datei enthält einen Kommentar Header. Dieser beginnt mit dem Dateinamen und einer kurzen Beschreibung und enthält meist noch weitere Angaben. Zumindest erforderlich sind Name und Matrikelnummer aller Autoren. Formatierungsregeln: Um die Formatierungsregeln besser zu verstehen, sollte unbedingt das Code-Beispiel genau betrachtet werden. Vor jeder Funktion steht eine Zeile dieser Form (Länge 60-70 Zeichen): //---------------------------------------- Nach dieser Trennline ist die Funktion kurz zu beschreiben. Speziell auch die Parameter und Rückgabewerte. Block Klammern stehen in eigenen Zeilen. Jeder Block muss eingerückt werden (2 Leerzeichen). Zeilen dürfen eine Breite von 72 Zeichen nicht übersteigen (siehe Code Beispiel für Umbruch) Zwischen Parametern und Operatoren sind Leerzeichen einzufügen Verschachtelungen sollten nicht zu tief sein (Richtwert maximal 4 Ebenen). Dabei ist besonders auf Übersichtlichkeit und korrekte Einrückung zu achten. Funktionen und Methoden sollen eine Länge von 70 Zeilen nicht übersteigen. Initialisierung ist gegenüber der Zuweisung zu bevorzugen: Gut: Class::Class():counter_(0) { } Schlecht: Class::Class() { counter_ = 0; } Using Direktiven wie using namespace std sind zu vermeiden. Stattdessen sollten using Deklarationen wie using std::cout verwendet werden. In Headerdateien sind keinerlei using Statements erlaubt! Stattdessen ist immer direkt Scoping zu verwenden (z.b.: printstring(std::string text);) Includes in Header Dateien sind wenn möglich zu vermeiden und durch forward Deklarationen zu ersetzen. Es sind die C++ Standard Header zu inkludieren (ohne.h) Bsp.: #include<stdio> (eigene Header mit.h). Includes sind zu gruppieren. Für eigenen Code ist ein Namespace zu verwenden (siehe auch Punkt 3, Namenskonvention) Für Konstanten ist im Allgemeinen const und nicht #define zu verwenden. (Hinweis: Es gibt auch enum) const wird Linksbindend verwendet. Also int const counter; statt const int counter; Seite 2

Pointer-Deklaration: char *c_string statt char* c_string (Stern immer direkt vor Variablenname) Public Members in Klassen sind nicht erlaubt außer sie sind const. Members dürfen also nur durch Methoden verändert werden. public, protected und private Methoden und Members sind zu gruppieren (also nicht ein public, private und wieder ein public member). Alle Header müssen durch Makros gegen mehrfaches Inkludieren geschützt werden. Als Namenskonvention gilt folgendes: #define FILE_NAME_H_ Beispiel für die Datei specialcounter.h: 1 #ifndef SPECIAL_COUNTER_H_ 2 #define SPECIAL_COUNTER_H_ 3 4 //insert the declarations here 5 6 #endif //SPECIAL_COUNTER_H_ Exceptions: Für alle eigenen Exceptions muss es eine von std::exception abgeleitet Basisklasse geben. Beispiel: 1 class OwnBaseException : public std::exception 2 { 3 }; 4 5 class InvalidArgumentException : public OwnBaseException 6 { 7 InvalidArgumentException(string const &message); 8 }; 9 10 // throwing an exception... 11 12 void testfunction () 13 { 14 throw InvalidArgumentException ("Function testfunction has been 15 called with invalid arguemnts"); 16 } Exceptions: Im Destruktor dürfen keine Exceptions geworfen werden. Bei Typedefs auf einen Standarddatentypen wird der definierte Datentyp klein geschrieben, z.b.: typedef double coord; typedef vector<int> choice; Seite 3

IV. Kurzes Code Beispiel (Cheat Sheet) 1 //---------------------------------------------------------------------- 2 /// Filename: main.cpp 3 /// Description: main file 9 #include "account.h" 10 11 #include <iostream> 12 13 using std::cout; 14 15 int main(int args, char *argv[]) 16 { 17 CodingStandardExample_::Account account = CodingStandardExample_::Account(0); 18 cout << account.getbalance() << std::endl; 19 account.depositmoney(100); 20 cout << account.getbalance() << std::endl; 21 account.withdrawmoney(77); 22 cout << account.getbalance() << std::endl; 23 } 1 //--------------------------------------------------------------------- 2 /// Filename: account.h 3 /// Description: money account to deposit and withdraw money 9 #ifndef ACCOUNT_H_ 10 #define ACCOUNT_H_ 11 12 namespace CodingStandardExample_ 13 14 { 15 //--------------------------------------------------------------------- 16 /// 17 /// Account 18 /// 19 /// a simple account for money 20 /// 21 /// @author <Andreas Weinberger sep-tw-andi@iicm.edu> 22 /// @version <1.0.0> 23 24 class Account 25 { 26 public: 27 2 29 /// 30 /// constructor 31 /// @param start_amount Initial balance for this account 32 33 Account(int start_amount); 34 35 //--------------------------------------------------------------------- 36 /// 37 /// @return int the current balance 38 39 int getbalance(); 40 41 //--------------------------------------------------------------------- 42 /// 43 /// deposit the amount of money to the account 44 /// @return void No description needed in this case 45 /// @param amount Amount of money to deposit on the account, if 46 /// there are more parameters use a seperate param tag for each 47 /// @exception Here would be the exception names and description if 48 /// there would be a throw clause 49 50 void depositmoney(int amount); Seite 4

51 52 //--------------------------------------------------------------------- 53 /// 54 /// decrease the balance by the given amount 55 /// @param amount Amount of money to withdraw, if there are more 56 /// parameters use a seperate param tag for each 57 58 void withdrawmoney(int amount); 59 60 protected: 61 int balance_; 62 }; 63 64 } 65 66 #endif // ACCOUNT_H_ 1 //---------------------------------------------------------------------- 2 /// Filename: account.cpp 3 /// Description: money account to deposit and withdraw money 9 #include "account.h" 10 11 //---------------------------------------------------------------------- 12 CodingStandardExample_::Account::Account(int start_amount): 13 balance_(start_amount) 14 { 15 } 16 17 //---------------------------------------------------------------------- 18 int CodingStandardExample_::Account::getBalance() 19 { 20 return balance_; 21 } 22 23 //---------------------------------------------------------------------- 24 void CodingStandardExample_::Account::depositMoney(int amount) 25 { 26 balance_ += amount; 27 } 28 29 //---------------------------------------------------------------------- 30 void CodingStandardExample_::Account::withdrawMoney(int amount) 31 { 32 balance_ -= amount; 33 } Seite 5