Seminar Programmierstil: Codierungsstandards

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Forschungszentrum caesar
Funktionen und Module Einführung anhand des Beispiels Wörter sortieren Timm Grams Fachhochschule Fulda Fachbereich Elektrotechnik und Informationstechnik.
Einführung in die Programmierung Zusammenfassung
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Dr. Andreas Winter Sommersemester 2007 Einführung in die Software-Entwicklung © Institut für Informatik Programmier-Richtlinien vgl. auch
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
SWITCH - Anweisung.
SWITCH - Anweisung.
ARRAY oder FELD oder VEKTOR
Der Präprozessor. Bevor der Compiler das Programm in Maschinencode übersetzt (nur dieser kann von der CPU, dem Herz des Computers, bearbeitet werden)
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
1 Named Pipes alias FIFO Haben einen Eintrag im Dateisystem und sind somit durch Zugriffsrechte identifizierbar Ermöglichen die Kommunikation zwischen.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Zusammenfassung Vorwoche
Die Skriptsprache Perl (2) Wolfgang Friebel DESY Zeuthen.
Der C-Präprozessor EDV1 - 04Präprozessor.
Der C-Präprozessor 08-CPräprozessor.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Planung einfache Dateibehandlung (externe Dateien, Öffnen, Lesen/Schreiben, Schließen). Diskussion des Problems, die Wörter in einem gegebenen Text.
Einfach verkettete Listen
Einfach verkettete Listen (OOP)
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmiersprache C 4
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
Style Guidelines für Java und .NET
C-Einstieg. Agenda 1Vorbereitung 2Aufbau eines Programms 2.1Header 2.2 Methoden 2.3Main 3Datentypen & Variablen 4Operatoren(+, -, *, /) 5Logik 5.1IF 5.2Switch.
Arrays / Felder Themen: Arrays / Felder / Vektoren Was soll das eigentlich? Erstellen von Arrays Arrays auslesen. Wie sie verwaltet werden.
BMEVIEEA100 Grundlagen der Programmierung
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Schleifen
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Programmierkurs JavaUE 4 Anweisungen und ProgrammeDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Imperative Programmierung Unterrichtseinheit.
Variablen und Datentypen
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
1 // 9_1_Datei_IO //Elementare Verwendung von Dateien // Vorsicht: nicht robust, #include const int maxLen = 70; void Schreiben(char *, ofstream *); void.
1 // Verkettete Liste 2 // demonstriert verkettete Listen und // Rekursion // (Einfügen am "Fuß") // #include struct Liste { int Element; Liste *weiter;
Java Programme nur ein bisschen objektorientiert.
Inhalte der Übungen 1.Grundlagen, Ein- und Ausgabe 2.Kontrollstrukturen (Projekt 1) 3.Funktionen 4.Zeiger, Felder (Projekt 2) 5.Strings, Strukturen 6.Fileverarbeitung.
Strukturen (Eigenschaften) Strukturen dienen zur Zusammenfassung mehrerer Komponenten verschiedener Typen zu einer Einheit, die dann mit gemeinsamen Namen.
Singletons, Exceptions und (s)printf. Template Klassen  äquivalent zu Template-Funktionen  beim Erzeugen von Instanzen muss der Typ angegeben werden.
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
Hello World! Javakurs 2013 Arne Kappen
Datentypen: integer, char, string, boolean
Zwei Denkansätze zur Klasse Schlange
Aufgaben zu Rückgabewerten
Java-Kurs - 4. Übung weitere Kontrollstrukturen
Datentypen: integer, char, string, boolean
Referenzen In c kennen wir gewöhnliche Variablen und Pointer.
Raphael Fischer Informatik II - Übung 03 Raphael Fischer
SS 04 Christiane Rauh Christian Hellinger
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Arrays in C Ein Array ist eine Variable, die aus einer Anzahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
GRUNDLAGEN WISSENSCHAFTLICHEN ARBEITENS MODULA-2 SONAY SUBAYAZ
1. Die rekursive Datenstruktur Liste 1
9. Vererbung und Polymorphie
 Präsentation transkript:

Seminar Programmierstil: Codierungsstandards Ein Vortrag von Kurt Prünner

Kurt Prünner: Codierungsstandards Eine Einigung auf einen Codierungsstandard ist notwendig sobald mehr als eine Person denselben Code bearbeiten soll bei Programmen, die zwar nur von einer Person geschrieben werden, aber irgendwann einmal von jemandem anderen gewartet werden sollen wenn man ein Programm auch ein paar Wochen, nachdem man es geschrieben hat, noch selber verstehen möchte 06.12.2018 Kurt Prünner: Codierungsstandards

Kurt Prünner: Codierungsstandards Jeder Codierungsstandard ist besser als gar keiner DEN Codierungsstandard gibt es nicht - es ist daher oft erforderlich, sich an einen anderen, oft schon von außen vorgegebenen Standard anzupassen Die folgenden Folien sollen daher hauptsächlich als Denkanstoß verstanden werden und nicht als ein in Stein gemeisselter Codierungsstandard 06.12.2018 Kurt Prünner: Codierungsstandards

Wie man es nicht machen sollte... #include <stdio.h> #define PO(o,t)\ (((o>64)&&(o<91))?(((t>96)&&(t<123))?(t-32):(t)):(((t>64)&&(t<91))?(t+32):(t))) void main() { char *poo= "poot", *Poo="pootpoot" ,O[9];int o,t,T,p;(t=p =0)||(*O='\0');while ((o= getc( stdin ))!=( EOF))if ((p== 0)&& (((o>64 )&& ( o<91 )) || ((o> 96 ) &&(o< 123) ))) ( t!=8 )&&(O [t]= o)&& (O[++ t] = '\0') ;else {if (t>7) {for (T = 0 ; T <=7; T++ ) printf("%c", PO(*( O+T), *(Poo+ T))); printf ("%c", o);}else if (t>3){for (T =0;T<= 3;T++) printf ("%c", PO(*(O +T),*( poo+T) ) ) ; printf( "%c" , o ) ; } else printf ( "%s%c" , O , o ) ; ( t = 0 ) || ( * O = '\0' ) ; ( o == 60 ) && ( ++p ) ; ( o == 62 ) && (p!=0) && ( --p ) ; } } http://ioccc.org/1998/dlowe.c 06.12.2018 Kurt Prünner: Codierungsstandards

Allgemeine Stilkriterien Schreibe Programme, die andere Leute lesen können, nicht nur der Compiler (siehe letzte Folie) Ersetze "Magische Zahlen" durch Konstanten - fast alle in einem Programm vorkommende Zahlen werden leichter verständlich, wenn man sie durch eine Konstante mit sprechendem Namen ersetzt M if ((ch == 37) || (ch == 42) || (ch == 47)) vs. if ((ch == '%') || (ch == '*') || (ch == '/')) 06.12.2018 Kurt Prünner: Codierungsstandards

Allgemeine Stilkriterien Zerlege komplexe Ausdrücke in kleinere Teilausdrücke, um diese besser verstehen zu können M *x += (*xp=(2*k < (n-m) ? c[k+1] : d[k--])); vs. if (2*k < (n-m)) *xp = c[k+1]; else *xp = d[k--]; *x += *xp; 06.12.2018 Kurt Prünner: Codierungsstandards

Kurt Prünner: Codierungsstandards Namensgebung Wähle sprechende Namen kurze Namen nur für lokale Variablen (num, i, cur) längere Namen für nicht-lokale Variablen (firstName, totalPoints, databaseConnection) Worte trennen PascalCasing (Große Wortanfänge) camelCasing (Erster Wortanfang klein) Konstanten kennzeichnen (MAX_VALUE) aktive Funktionsnamen (getTime(), isDigit()) 06.12.2018 Kurt Prünner: Codierungsstandards

Kurt Prünner: Codierungsstandards Namensgebung Achte auf konsistente Namensgebung M class UserQueue { int noOfItemsInQ, frontOfTheQueue, queueCapacity; public int noOfUsersInQueue() {...} } Wähle passende Namen M boolean isDigit(char i) { return (i == ' '); } M boolean checkDigit(char i) { ... } 06.12.2018 Kurt Prünner: Codierungsstandards

Kurt Prünner: Codierungsstandards Hungarian Notation Name bestehend aus: Prefixes: a (Array) h (Handle) c (Count) i (Array-Index) d (Difference) m (Modul-global) e (Array-Element) p (Pointer) g (Global) Base Type (programmspezifisch): wn (Window), scr (Screen), ch (Character) 06.12.2018 Kurt Prünner: Codierungsstandards

Kurt Prünner: Codierungsstandards Hungarian Notation Name bestehend aus: Qualifier: beschreibender Teil des namens, z.B. pwnMain, ghscrUserWorkspace, chRead Standard-Qualifier: Min Array-Anfang First Erstes zu bearbeitendes Element Last Letztes zu bearbeitendes Element Lim Oberes Limit, das nicht erreicht wird (Last+1) Max Array-Ende 06.12.2018 Kurt Prünner: Codierungsstandards

Kurt Prünner: Codierungsstandards Whitespace Verwende Leerzeilen, um zusammengehörige Codezeilen von anderen abzutrennen StringBuffer buf = new StringBuffer(); int i = 0; int j; while ((j = st.indexOf(s,i)) >= 0) { buf.append(st.substring(i,j)); buf.append(r); i = j+s.length(); } 06.12.2018 Kurt Prünner: Codierungsstandards

Kurt Prünner: Codierungsstandards Whitespace Verwende Leerzeichen, um Operanden und Operatoren in Ausdrücken zu gruppieren - unter Beachtung der Vorrangregeln M x = y+4 * z-3 vs. x = y + 4*z - 3 06.12.2018 Kurt Prünner: Codierungsstandards

Kurt Prünner: Codierungsstandards Einrückungen Einrückungen sollen die logische Struktur des Codes genau und konsistent wiedergeben M for (int i = 1; i < 10; i++) score[i] = 0; name[i] = ""; date[i] = null; M if (i != 0) i--; else return i; 06.12.2018 Kurt Prünner: Codierungsstandards

Kurt Prünner: Codierungsstandards Einrückungen Einrückungen sollen den Code lesbarer machen M if (x == 0) if (y == 0) x++; else y--; Einrückungen sollen Änderungen gegenüber robust sein M void doSomething(String firstName, String lastName, String company) 06.12.2018 Kurt Prünner: Codierungsstandards

Kurt Prünner: Codierungsstandards Klammerung Klammerung soll Ausdrücke für den, der den Code liest, eindeutig machen Setze bei komplizierteren Ausdrücken auch dann Klammern, wenn es durch die Vorrangregeln der Programmiersprache nicht unbedingt nötig wäre leapYear = y%4 == 0 && y%100 != 0 || y%400 == 0; vs. leapYear = ((y%4 == 0) && (y%100 != 0)) || (y%400 == 0); 06.12.2018 Kurt Prünner: Codierungsstandards

Kurt Prünner: Codierungsstandards Klammerung Vor allem bei der Verwendung von Operatoren, die nicht in direktem Zusammenhang stehen, ist es sinnvoll, auf jeden Fall Klammern zu setzen M if (x&MASK == BITS) bedeutet in Wahrheit if (x & (MASK == BITS)) Gemeint war aber wohl if ((x & MASK) == BITS)) 06.12.2018 Kurt Prünner: Codierungsstandards