Programmierung 1 - Wir starten - Quelle: Kroneck (2013) Prof. Dr.-Ing. Frank Neumann HTW Berlin, Ingenieurinformatik email: frank.neumann@htw-berlin.de Wir starten Ziele • Verstehen des Begriffs Programmieren und von dessen Inhalten • Erlernen des Erzeugens von einfachen Konsolen-Anwendungen • Verstehen der Begriffe Compiler, Integrated Development Environment (IDE) und C# • Kennenlernen des Aufbaus des Visual Studios (VS) Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 2 Inhalt 1 Was ist Programmieren? 2 Compiler 3 Hallo.cs 4 IDE 5 C# Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 3 Was ist Programmieren? Bestandsaufnahme Programmiererfahrungen vorhanden? – in welcher Sprache – in welchem Umfang Mit welchen Werkzeugen? – Entwicklungsumgebungen – Bibliotheken Was wurde implementiert – Anwendungsgebiet (Web, Tools, …) – Welche bestehende Software wurde eingebunden/angepasst? Wie wurde implementiert – allein/im Team – prozedural/objektorientiert – mit/ohne vorausgehenden Konzeptüberlegungen Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 4 Was ist Programmieren? Wir bringen die Gemeinsamkeiten auf den Punkt… Ausgangspunkt: Anforderungen Setzt um in long fakultaet(long n) { if (n == 0) { return 1; } else { return n * fakultaet(n-1); } } Programmiersprache Quellcode Texteditor Kompilieren und linken/binden oder interpretieren Ziel: Ausgeführter Maschinencode Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 5 Was ist Programmieren? Versuch einer Definition – dafür Einordnung in den Softwarelebenszyklus Weitgehend synonym für “Programmieren” Quelle: Balzert (2011) Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 6 Was ist Programmieren? Versuch einer Definition Programmieren: Der Begriff Programmieren wird weitgehend synonym für die eigentliche Implementierung eines Softwareprodukts verstanden. Hierzu gehören u.a. folgende Einzelaktivitäten: − Konzeption von Datenstrukturen und Algorithmen − Strukturierung des Programms − Umsetzung der Konzepte in die Konstrukte der verwendeten Programmiersprache − Angaben zur Zeit- und Speicherkomplexität des Programms in Abhängigkeit von den Eingabegrößen − Test oder Verifikation des entwickelten Programms einschließlich Testplanung und Testfallerstellung bei Anwendung einer Testmethode. Quelle: Balzert (2011) Im Fach Programmierung werden wir auch darüberhinausgehende Aktivitäten der Softwareentwicklung betrachten, z.B. Spezifikation und Entwurf. Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 7 Was ist Programmieren? Weitere Begriffe (1) Softwaretechnik (software engineering): – Software engineering (SWE) is the application of engineering to the development of software in a systematic method. Quelle: Wikipedia – Zielorientierte Bereitstellung und systematische Verwendung von Prinzipien, Methoden und Werkzeugen für die arbeitsteilige, ingenieurmäßige Herstellung, Anwendung und Pflege von umfangreichen Softwaresystemen. Quelle: Balzert (2011) Quelle: Balzert (2011) Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 8 Was ist Programmieren? Weitere Begriffe (2) Softwareentwicklung (software development): Umfasst die Planung, Definition, den Entwurf und die Implementierung eines Softwareprodukts, das die geforderten Qualitätseigenschaften besitzt und die Kundenwünsche erfüllt. Nach der Softwareerstellung befindet sich das Softwareprodukt in der Anwendung und muss gepflegt und gewartet werden. Wartung bedeutet, ein nach der Inbetriebnahme auftretendes Fehlverhalten zu beseitigen. Pflege bedeutet, ein Produkt an geänderte Bedingungen anzupassen oder aufgrund neuer oder geänderter Anforderungen weiterzuentwickeln. Quelle: Balzert (2011) Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 9 Inhalt 1 Was ist Programmieren? 2 Compiler 3 Hallo.cs 4 IDE 5 C# Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 10 Compiler Wozu brauchen ich denn den? Das wichtigste Programm, um mit einem C#-Programm richtig loszulegen, ist der Compiler. Dieser übersetzt den verhältnismäßig gut lesbaren Programmcode in eine andere, für den Computer einfacher verständliche Sprache. Fast noch schlimmer: Es ist erstmal noch kein Maschinencode. Der Programmcode wird in die Intermediate Language (IL-Code genannt) übersetzt. Erst beim Ausführen des Programms wird nun der IL-Code in Maschinencode übersetzt. Dies übernimmt ein weiterer Compiler – der sogenannte Just-in-time-Compiler (JIT-Compiler genannt). Quelle: Wurm (2017) Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 11 Compiler Wie kann ich mir das vorstellen? C# C# if (a > b) max = a; else max = b; IL-Code C# Compiler IL_0004: IL_0005: IL_0006: IL_0008: IL_0009: IL_000a: IL_000c: IL_000d: IL Code (+ Metadaten) Lader ldloc.0 ldloc.1 ble.s IL_000c ldloc.0 stloc.2 br.s IL_000e ldloc.1 stloc.2 Maschinencode Verifizierer mov ebx,[-4] mov edx,[-8] cmp ebx,edx jle 17 mov ebx,[-4] mov [-12],ebx ... JIT Compiler Maschinencode Warum geht denn das nicht einfacher? Quelle: Mössenböck (2015) Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 12 Compiler Begriffe C#-Compiler: Der C#-Compiler erzeugt aus C#-Quellcode (cs Datei) IL-Code. IL-Code (IL für Intermediate Language): IL-Code ist ein Zwischencode, der von den Compilern der unterschiedlichen .NET-Sprachen erzeugt wird. Die Erzeugung von Zwischencode ermöglicht die Plattformunabhängigkeit und wahlweise Optimierungen. Die Intermediate Language ist eine objektorientierte Assemblersprache. JIT-Compiler (JIT für Just-in-time): Der JIT-Compiler erzeugt zur Laufzeit des Programms aus IL-Code den für die jeweilige Prozessorarchitektur (x86, x64, ARM) benötigten Maschinencode. Maschinencode: Der Maschinencode enthält Anweisungen, die vom Prozessor direkt ausgeführt werden können. Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 13 Compiler Wo finde ich den Compiler? Der C#-Compiler ist Teil des .NET Frameworks. Das jeweils aktuelle .NET-Framework ist bei der Windows-Installation bereits dabei. • Windows 7 enthält das .NET Framework Version 4 • Windows 8 das .NET Framework 4.5 • Windows 10 ohne Updates das .NET-Framework 4.6, usw. Natürlich kann man die neuen Versionen auch in ältere Windows-Versionen installieren. csc.exe Der Compiler ist die (csc steht für C-Sharp-Compiler) und in dem Verzeichnis C:\Windows\Microsoft.NET\Framework64\V*** zu finden. Quelle: Wurm (2017) Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 14 Inhalt 1 Was ist Programmieren? 2 Compiler 3 Hallo.cs 4 IDE 5 C# Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 15 Hallo.cs Wie kann ich meinen C#-Quellcode schreiben? • Das geht erstmal in jedem beliebigen Texteditor (Notepad oder auch Notepad++ )… • Wie gehe ich vor? 1. 2. 3. 4. schreiben, abspeichern, durch den Compiler anschließend zu einem Programm übersetzen und laufen lassen. Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 16 Hallo.cs Jetzt geht’s im Texteditor wirklich los… Damit der Compiler Console ohne Namespace-Angabe kennt, wird using System angegeben. Ohne using System müsste man sonst System.Console schreiben. using System; public class Programm { public static void Main() { Console.WriteLine("Hallo Ingenieurinformatik"); Console.ReadKey(); } } Alle Programme starten mit der Main-Methode. Alle Befehle innerhalb der beiden geschwungenen Klammern in dieser Methode werden Zeile für Zeile ausgeführt. Die Main-Methode gibt es immer. Prof. Dr.-Ing. F. Neumann Das Programm wartet durch die ReadKey-Methode, bis der Benutzer eine Taste drückt, und geht erst dann zur nächsten Zeile weiter. Dadurch wird es nicht automatisch beendet, und man hat nicht das Problem, dass das Fenster nur kurz aufflackert. Programmierung 1 - Nur für Lehrzwecke Zeigt mithilfe der Methode WriteLine den Text "Hallo Ingenieurinformatik" in der Konsole an. Quelle: Wurm (2017) 17 Hallo.cs Jetzt wird kompiliert und ausgeführt! Annahmen: 1. Hallo.cs liegt im aktuellen Verzeichnis. 2. Hallo.exe soll ebenfalls dort erzeugt werden. • • • Eine Konsole öffnen: „cmd.exe“ Dort eingeben: „C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc /out:Hallo.exe Hallo.cs“ Und „Hallo.exe“ starten Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 18 Inhalt 1 Was ist Programmieren? 2 Compiler 3 Hallo.cs 4 IDE 5 C# Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 19 IDE Ein Texteditor ist gut … …aber mit einer integrierte Entwicklungsumgebung macht das Programmieren deutlich mehr Spaß. Integrated Development Environment (IDE): Eine integrierte Entwicklungsumgebung ist eine Anwendung für Softwareentwickler, die die wesentlichen Werkzeuge (Quellcodeeditor, Compiler, Debugger, …) für die Programmierung innerhalb einer einheitlichen Benutzeroberfläche zur Verfügung stellt. Für C# stehen unter Windows folgende IDEs zur Verfügung: • Visual Studio (VS) in verschiedenen Editionen • SharpDevelop • Visual Studio Code (nur .NET Core) • Xamarin Studio • Rider Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 20 IDE Wir wählen Visual Studio Enterprise 2017 Warum? Umfasst neben den Features für die Entwicklung von: • Webanwendungen • Desktopanwendungen • Universal Windows Platform Apps Enthält viele Tools, die das Programmieren erleichtern: • Modellieren von Klassendiagrammen • Visualisieren von Code mit Code Maps • Automatische Syntaxprüfung und –ergänzung • … Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 21 IDE Jetzt geht’s im VS wirklich los… (1) Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 22 IDE Jetzt geht’s im VS wirklich los… (2) Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 23 IDE Jetzt geht’s im VS wirklich los… (3) Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 24 IDE Jetzt geht’s im VS wirklich los… (4) Prof. Dr.-Ing. F. Neumann Was passiert jetzt? Programmierung 1 - Nur für Lehrzwecke 25 IDE Jetzt geht’s im VS wirklich los… (5) • Toolbareintrag „Starten“ steht für Befehl „Debugging starten“, Shortcut: F5 Mehr dazu in der nächsten Vorlesung • Alternative ist der Befehl „Starten ohne Debugging“, Shortcut: Strg+F5 Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 26 IDE Überblick zur Benutzeroberfläche des VS Quellcode-Editor mit Codevervollständigung und DropDowns für Navigation Ausgabefenster zeigt Statusmeldungen für verschiedene Funktionen (Erstellen, Debuggen, …) an. Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke Eine Projektmappe besteht aus Projekten. Ein Projekt setzt sich aus verschiedenen Quellcode- u.a. Dateien zusammen. Eigenschaftsfenster zeigt verschiedene Eigenschaften und Ereignisse für ausgewählte Dateien etc. an. 27 Inhalt 1 Was ist Programmieren? 2 Compiler 3 Hallo.cs 4 IDE 5 C# Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 28 C# Einordnung von C# • C# ist eine objektorientierte Sprache für die .NETPlattform. • Die Sprache enthält Elemente von Java, C++, Visual Basic, Delphi und funktionaler Programmiersprachen. • Sie wurde durch folgende Organisationen standardisiert: Ecma (ECMA-334) und ISO (ISO/IEC 23270:2006). • C# wurde von einem kleinen Team unter der Leitung von Anders Hejlsberg bei Microsoft entworfen (2002) und wird laufend weiterentwickelt (VS2015 – C# 6.0, VS2017 – C# 7.0). • Mehr zur Person von A. Hejlsberg unter: https://channel9.msdn.com/shows/Behind+The+Code/ Life-and-Times-of-Anders-Hejlsberg/ Quellen: Mössenböck (2015) und Wikipedia Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 29 C# Andere .NET-Sprachen C# C# Compiler C# C++ C++ Compiler VB ... VB Compiler … Compiler IL Code (+ Metadaten) Lader Verifizierer JIT Compiler Maschinencode if (a > b) max = a; else max = b; IL-Code IL_0004: IL_0005: IL_0006: IL_0008: IL_0009: IL_000a: IL_000c: IL_000d: ldloc.0 ldloc.1 ble.s IL_000c ldloc.0 stloc.2 br.s IL_000e ldloc.1 stloc.2 Maschinencode mov ebx,[-4] mov edx,[-8] cmp ebx,edx jle 17 mov ebx,[-4] mov [-12],ebx ... Insgesamt gibt es mehr als 30 aktive .NET Sprachen Siehe https://de.wikipedia.org/wiki/Liste_von_.NET-Sprachen Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke Quelle: Mössenböck (2015) 30 Was gelernt?! Quiz zur Zusammenfassung (1) Was ist Programmieren und welche Einzelaktivitäten umfasst es? Unter Programmieren verstehen wir die eigentliche Implementierung eines Softwareproduktes. Es umfasst u.a. das Strukturieren des Programms, das Schreiben des Quellcodes, das Debuggen und Testen des Programms. Welche Art von Ausgaben und Eingaben ermöglicht eine Konsolenanwendung? Ein Nutzer kann mit einer Konsolenanwendung nur textbasiert kommunizieren. Welche Methode benötigt jedes ausführbare Programm (Executable = exe)? Die Main-Methode, die unmittelbar nach dem Laden des Programms ausgeführt wird. Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 31 Was gelernt?! Quiz zur Zusammenfassung (2) Welche Aufgabe hat der C#-Compiler? Der C#-Compiler erzeugt aus C#-Quellcode (cs Datei) IL-Code.. Welche Aufgabe hat der JIT-Compiler? Der JIT-Compiler erzeugt zur Laufzeit des Programms aus IL-Code den für die jeweilige Prozessorarchitektur (x86, x64, ARM) benötigten Maschinencode. Was versteht man unter einer IDE? Unter einer IDE versteht man eine integrierte Entwicklungsumgebung für Softwareentwickler, die die wesentlichen Werkzeuge (Quellcodeeditor, Compiler, Debugger, …) für die Programmierung innerhalb einer einheitlichen Benutzeroberfläche zur Verfügung stellt Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 32 Danke für Ihre Aufmerksamkeit! Gibt es Fragen? Prof. Dr.-Ing. F. Neumann Programmierung 1 - Nur für Lehrzwecke 33