Programmiersprachen
Programmier-sprachen
Computerbefehle
- Problem: Welche Operationen sollen in welcher Reihenfolge ausgeführt werden??
Was ist ein Algorithmus?
- zentraler Begriff der Informatik, aber keine Besonderheit der Informatik
- Algorithmen im Alltag allgegenwärtig, oft ohne sie als solche zu erkennen
- Wir führen ohne es zu merken ständig Algorithmen aus
- Algorithmisches Denken ist eine allgemeine Methode um “Wissen zu organisieren” (D. Knuth)
Algorithmus = Problemlösungsvorschrift
- Die Lösung einer Aufgabe bedarf einer eindeutigen Vorschrift, die genau festlegt, welche Aktionen (Handlungen) nacheinander oder nebeneinander auszuführen sind
- Die Bezeichnung Algorithmus leitet sich von Al-Chowarizmi (persischer Mathematiker und Astronom) ab
Algorithmus - Definition
Ein Algorithmus ist eine vollständige, präzise und in einer Notation oder Sprache mit exakter Definition abgefasste, endliche Beschreibung eines schrittweisen Problemlösungsverfahrens zur Ermittlung gesuchter Datenobjekte (ihrer Werte) aus gegebenen Werten von Datenobjekten, in dem jeder Schritt aus einer Anzahl ausführbarer, eindeutiger Aktionen und einer Angabe über den nächsten Schritt besteht.
Maschinensprache
Zu Beginn der Computerentwicklung war die einzige Möglichkeit der Programmierung, binären Maschinencode zu schreiben.
- Nachteil: sehr aufwändig, sehr schwer verständlich
Maschinensprache
In Spezialfällen (zB Quellcode nicht mehr verfügbar) kann es nötig sein Maschinencode zu ändern.
Diverse Tools verfügbar, zB:
Assembler
Um nicht mehr direkt Maschinensprache schreiben zu müssen wurde Assembler geschaffen.
Hier werden Kürzel (Mnemonics) verwendet die CPU Befehle darstellen, zB mov
oder int
.
Assembler (2)
Es gibt keine eine Assembler Sprache, da Befehle für jede CPU-Architektur anders sind.
Assembler erfordert also gute Kenntnisse in Aufbau und Arbeitsweise des zu programmierenden Systems.
Fortran
- Formula Translation
- Als Sprache zur Übersetzung von Formeln, vorwiegend für den technisch-wissenschaftlichen Bereich konzipiert.
- Heutzutage noch für Simulationsberechnungen (zB Klimamodelle, Autocrashs) verwendet
COBOL
- Common Business Oriented Language
- Einsatz in der Datenverarbeitung
- Auch heute noch teilweise verbreitet (Behörden, Banken).
BASIC
- Beginners All-purpose Symbolic Instruction Code
- War für die Ausbildung von Programmierung gedacht.
- Wurde in 80er Jahren tlw. auf Heim-Computern mitgeliefert -> starke Verbreitung
- Später Abwandlungen von Basic, zB Visual Basic .NET oder Visual Basic for Applications (VBA)
Pascal
- Ende der 70er Jahre als Sprache für den Unterricht entwickelt
- An Hochschulen immer noch beliebt
- Strenge Formvorschriften
- Einfacher kontrollierbar und wartbar
- Einsatz auch in sicherheitskritischen Bereichen (zB Energieversorgung)
C / C++
- C wurde für die Entwicklung des Betriebssystems UNIX entworfen.
- C ist hardwarenahe und erlaubt große Kontrolle über Details wie Speicherverwaltung.
- “Don’t prevent the programmer from doing what needs to be done.”
- Große Freiheit kann zu schlechtem Design und schwer wartbarem Code führen.
- C++ ist Weiterentwicklung mit objektorientierten Aspekten
C++
C#
- Entwickelt von Anders Hejlsberg von Microsoft in 2000
- General Purpose High Level Programming Language
- Die Sprache wird nach wie vor weiterentwickelt. Letztes Update C# 12 im November 2023.
- Vereint Eigenschaften verschiedener Programmierparadigmen (imperativ, objektorientiert, funktional)
C#
Java
- Zusammen mit C#, Python und JavaScript eine der meist genutzten Programmiersprachen
- Vergleichbar mit C#
- Von Beginn an Fokus auf Plattformunabhängigkeit
PHP
- PHP Hypertext Preprocessor (früher auch Personal Home Page Tools)
- Skriptsprache die speziell für den Einsatz im Internet entwickelt wurde.
- Wird verwendet um Websiten (HTML) mit dynamischer Logik anzureichern.
- Content-Management-Systeme (CMS) wie WordPress, TYPE3 oder Joomla! verwenden PHP
Python
- Skriptsprache
- Einfacher Einstieg
- im Bereich der künstlichen Intelligenz stark verbreitet
Konzepte
Konzepte die Programmiersprachen-übergreifend vorkommen:
- Anweisungen
- Block
- Bedingungen
- Operatoren
- Schleifen
- Variablen
- Datentypen
- Strukturen
- Array
- …
Kompilierung
- Kompilieren meint das Übersetzen von Programmiersprachen zu Maschinencode.
- Der Compiler liest die erstellten Quellcode-Dateien ein und erstellt ausführbare Programme, die Maschinencode enthalten.
- Zu den kompilierten Sprachen zählen unter anderem C, C++, Pascal.
Skriptsprachen
- Oftmals ist auch die Rede von Skriptsprachen
- Skriptsprachen sind Programmiersprachen, die zur Ausführung des Programms ein zusätzliches Programm - den Interpreter - brauchen.
- Der Interpreter liest die erstellten Quellcode-Dateien ein und führt die darin enthaltenen Befehle direkt auf der CPU aus.
- Skriptsprachen gelten allgemein als etwas langsamer als kompilierte Sprachen, da bei jeder Ausführung das Programm neu interpretiert werden muss und die Befehle ermittelt werden müssen, die auf der CPU ausgeführt werden.
- Zu den Skriptsprachen zählen unter anderem Python, PHP, JavaScript.
Mischformen - Java
- Es gibt auch Sprachen bei denen die Einteilung in kompilierte vs. Skript-Sprachen nicht so eindeutig is.
- Java Programme werden zwar grundsätzlich kompiliert, das Ergebnis ist aber nicht Maschinencode, sondern Bytecode.
- Dieser Bytecode wird dann von einer Ausführungsumgebung - der Java Runtime - interpretiert.
- Der Bytecode ist dabei so optimiert, dass die Interpretation möglichst effizient erfolgen kann.
Mischformen - C#
- Eine weitere Sonderform stellt die Programmiersprache C# dar.
- Hier wird ähnlich wie bei Java der Quellcode zuerst auf eine Art Bytecode - im Fall von C# wird dieser Intermediate Language genannt - kompiliert.
- Im Unterschied zu Java wird dieser IL-Code von der Runtime nicht interpretiert, sondern beim ersten Aufruf nach Maschinencode übersetzt. Man nennt das JIT-Compilation (Just In Time)
- Mittlerweile gibt es auch Möglichkeiten C# direkt nach Maschinencode zu übersetzen. Das wird im Gegensatz zu JIT-Compilation dann AOT-Compilation (Ahead Of Time) genannt.
Datentypen
- Zur Repräsentation von Werten werden in der Programmierung unterschiedliche Arten primitiver Datentypen verwendet.
- Dazu gehören:
- Ganzzahlige Werte (Integer, Long, Short, Signed, Unsigned)
- Fließkommazahlen (Float, Double)
- Wahrheitswerte (Boolean)
- Zeichen (Character)
- Zeichenketten (String)
Repräsentation von Werten
- Alle Werte, die im Rechner gespeichert und verarbeitet werden müssen in Form von Binärzahlen dargestellt werden.
- Ganzzahlige Werte: Binärsystem
- Wahrheitswerte: Bits
- Zeichen, Zeichenketten: Kodierung (ASCII, UTF-8, usw.)
Repräsentation von Fließkommawerten
- Wissenschaftliche Darstellung mit Mantisse und Exponent:
- IEEE Floating Point Converter
- Merke: Fließkommazahlen haben eine gewisse Ungenauigkeit. Nicht alle Werte können exakt dargestellt werden.