252-0027 Einführung indie Programmierung I 2.0Einfache JavaProgramme ThomasR.Gross DepartmentInformatik ETHZürich Uebersicht § 2.0Einfache JavaProgramme § Struktur § Namen § Output 2 Graphische Darstellung vonEBNFRegeln § SyntaxGraph:graphische Darstellung § Macht es leichter zu erkennen,welche Zeichen ineinem Symbol(inwelcher Reihenfolge)auftreten müssen § ABCDals Graph: § [A]als Graph: § {A}als Graph: 4 § A|B|C|Dals Graph 6 Pfad durch Graph:legales Symbol § Aufreihung:durch jedes ElementinderReihe § Auswahl:ein ElementinderLeiter § Option:entweder obere Kante (mit Element)oder untere (ohne) § Wiederholung:wie Auswahl § Einzige Formdieeinen Pfeil vonrechts nach linkshat 8 9 10 EBNFBeispiel 11 13 Substitution § Können einen Syntax Graphen ineinen anderen einsetzen § “interne”Namen verschwinden 14 Wasfür Symbole sind legal? 1. 3. 2. 15 18 19 20 Rekursion § Eine rekursive Beschreibung manchmal nötig um komplizierte Symbole zu beschreiben § Rekursive Beschreibung enthält rekursive Regeln § Eine Regelist direkt rekursiv wenn ihr NameinderDefinition verwendet wird § AlsoLHSerscheint auch aufderRHS § r ⟸ |Ar § EBNFDescriptionr(Folge vonnulloder mehr As) 21 23 Diskussion § Warum derAufwand? § r ⟸ {A} § Kann jede Wiederholung durch Rekursion ausgedrückt werden? § Kann jede Rekursion durch Wiederholung(en)ausgedrückt werden? 24 26 27 § Direkte Rekursion § r ⟸ A|Ar § Indirekte Rekursion § Folge vonRegeln N1 …Nk sodass N2 aufderRHSvonN1,N3 aufder RHSvonR2,…undN1 aufderRHSvonNk erscheint § name1 ⟸ Aname2 § name2 ⟸ Bname1 |C 28 Nochmal integer 29 Nochmal integer § BNFenthielt erst nur Rekursion undAuswahl § OptionundWiederholung vonNicklausWirthhinzugefügt § Daher “E”– extended 30 EBNF § Hält dieSyntaxRegeln vonJavaProgrammen fest § Beispiel:Namen inProgrammen § Bezeichner (“identifier”)müssen Anforderungen erfüllen § Bezeichner mussmindestens ein Zeichen lang sein § …mussmit Buchstaben anfangen (a-z,A-Z) § …kann Buchstaben oder Ziffern (0-9)enthalten § (Javaerlaubt noch mehr)(Manchmal gibt es noch mehr Einschränkungen) 32 JavaRegeln (vereinfacht) EBNFBeschreibung bezeichner lowercaseletter ⟸ a |b |c |d |e |f |g |h |i |j |k |l |m |n |o |p | q |r |s |t |u |v |w |x |y |z uppercaseletter ⟸ A |B |C |D |E |F |G |H |I |J |K |L |M |N |O | P |Q |R |S |T |U |V |W |X |Y |Z letter digit bezeichner ⟸ lowercaseletter |uppercaseletter ⟸ 0|1|2|3|4|5|6|7|8|9 ⟸ letter {letter |digit } 34 Konstruktion derBeschreibung 1. VerstehenderAufgabe 2. Konstruktion einer Lösung 3. Prüfen ob Aufgabe gelöst ist 4. Fertig 35 2.0Einfache JavaProgramme § Sie sollten Uebung 0gemacht haben § Odersicher seindass diese keine Schwierigkeiten macht § AbUebung 1müssen Sie in“mystudies”registriert sein § Heute hochgeladen § Stellt sicher dass Sie Programmfragmente erhalten können und Lösungen abgeben können § Keine Gruppentreffen heute (wohl aber nächste Woche) 36 37 38 Java § Wir ignorieren fürs erste viele Aspekte dienicht absolut notwendig zum Verständnis sind § 1.Ziel:Programm lesen § 2.Ziel:Programm verstehen § 3.Ziel:Programm erstellen § Oftdurch Modifikation eines Programmes § Wir können aber nicht alles ignorieren … 40 41 § class :JavaProgramm (nur 1class/Datei fürs erste) § NamedesProgramm gleich Namen derDatei 43 § main:JavaMethode (JavaCodedenwir ausführen können) § Methode enthält Aufreihung (“sequence”)vonAnweisungen (“statements”) 45 § println:JavaMethode (Funktion) § Gibt Stringaus (“druckt”) § String:Textzwischen “(Anführungszeichen,“quotationmark”, 46 “doublequote”)und“(beide “müssen oben sein) JavaDetails § Wir werden einen Teil desProgrammes (fürs erste) ignorieren § Aberwir können ihn nicht weglassen! § Sonst können wir dasJavaProgramm nicht ”übersetzen” § Uebersetzen (kompilieren,“compile")heisst ineine Formbringen,die ausgeführt werden kann § Es gibt Fehlermeldungen wenn wir Teile weglassen oder falsch schreiben 47 49 Java § Nicht alle Rückmeldungen desUebersetzers (“compilers”) sind soklar 50 52 Wir machen malweiter …. 53 54 § Leicht zu übersehen:dieletzte } fehlt 55 56 Zusammenfassung public class name { class: ein Programm mit Namen public static void main(String[] args) { statement; statement; ... statement; method: Gruppe von Anweisungen mit Namen main } } statement: Anweisung die ausgeführt werden soll 57 § Jedes (ausführbare)JavaProgramm besteht aus einer Klasse (class) § dieeine Methode main enthält, § dieeine Reihe vonAnweisungen enthält § Später arbeiten wir mit Programmen mit mehreren Klassen 58 println(),println(“Hello”) § Gross/Kleinschreibung wird unterschiedlich behandelt public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); System.out.println(); System.out.println("Hello World!"); } } Output: Hello World! Hello World! 59 Namen undBezeichner § Jedes Programm braucht einen Namen public class HelloWorld { § Konvention:fängt mit Grossbuchstaben an § Konvention:Grossbuchstaben zur verbesserten Lesbarkeit § Regel:Dateiname gleich Programmname HelloWorld.java § Gross/Kleinbuchstaben sind (inJava)unterschiedlich 60 § Bezeichner:Namefür ein Programmelement § Mussmit einem Buchstaben (grossoder klein)anfangen § oder mit _(Unterstrich,“underscore”)oder mit “$”(Dollarzeichen) § danach Ziffern oder obige Zeichen § Konvention:Methodenname Kleinbuchstaben 61 Reservierte Symbole § keyword:Ein Bezeichner (“identifier”)derreserviert ist (weil er für dieSprache eine besondere Bedeutung hat) abstract boolean break byte default do double else if implements import instanceof private protected public return this throw throws transient case catch extends final int interface short static try void char class const continue finally float for goto long native new package strictfp volatile super while switch synchronized 62 Kommentare Kommentare (“comments”)sind Notizen im Programmtext,die einem Leser beim Verstehen desProgrammes helfen (sollen) § Leser:kann auch der Authorsein § Kommentare werden nicht ausgeführt,haben keinen Einfluss auf Programm § 2Varianten § // Text bis zum Ende der Zeile § /* Text bis zum naechsten */ 63 Wo sollten Kommentare stehen § Anfang desProgramms § Zweck § Algorithmus § Author § Anfang jeder Methode § Darüber später mehr § Für Codedernicht sofort verstandlich ist § Kommentare wichtig für grosse Projekte,Programme mit mehreren Authoren,Programme diesich oftändern 64 Beispiel /* * Author: Ein Student; Herbst 2016, Uebung 1 * Entwurf uebernommen von einer Assistentin */ public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } // end main } // end HelloWorld 65 Strings § String:eine Folge vonZeichen (“characters”)eingeschlossen in“und“ § “hello” § “Hello” § “3+2” § Einschränkungen: § Nur eine Zeile lang “Das ist kein Java String” § Darf nicht “enthalten (“So etwas “geht” nicht”) 66 Sonderzeichen § Undwasmachen wir wenn wir ein “ausgeben wollen? § Esgibt sogenannte Ersatzdarstellungen (“escapesequences”) mit denen ein Sonderzeichen ausgedrückt werden kann § Fangen alle mit \ (Rückwärtsschrägstrich) (“backslash”)an \t Tabcharacter \n Neue Zeile (newlinecharacter) \" Quotationmark (doublequote)character \\ Backslashcharacter 67 Beispiele § Beispiel: System.out.println(“\\Hallo\nWie\tgeht es \”Ihnen\”?\\\\"); § Output: \Hallo Wie geht es ”Ihnen"?\\ 69 Fragen § Wasdrucken diese println Statements? System.out.println("\ta\tb\tc"); System.out.println("\\\\"); System.out.println("'"); System.out.println("\"\"\""); System.out.println("C:\neuer Spor\t Wagen"); § Welchesprintln Statementdruckt dieser String? / \ // \\ /// \\\ 70 Antwort § Outputofeachprintln statement: a \\ ' """ C: euer Spor b c Wagen 71 Antwort § println statementtoproducethelineofoutput: System.out.println("/ \\ // \\\\ /// \\\\\\"); 72