PF 01
Grundlagen
Grundlagen
-
- 1 / 38
-
Flashcards
Was ist eine IDE?
Eine integrierte Entwicklungsumgebung (IDE) stellt Programmierern eine Sammlung der wichtigsten Werkzeuge zur Softwareentwicklung unter einer Oberfläche zur Verfügung.
Was bedeutet GUI?
Grafische Benutzeroberfläche oder auch grafische Benutzerschnittstelle (Abk. GUI von englisch graphical user interface)
Was ist ein (Computer-)Programm?
- ist eine Folge von Anweisungen (mittels Regeln und Richtlinien der Programmiersprache).
- ein Programm teilt dem Rechner mit, wie ein Problem gelöst wird. (Algorithmus)
- ein Programm besteht aus Befehlen
- Programme werden nach Regeln und Richtlinien aufgebaut (Programmiersprachen)
Was ist ein Algorithmus?
- ist eine eindeutige Handlungsvorschrift zur Lösung eines Problems
- besteht aus endlich vielen Einzelschritten
- kann zur Ausführung im Computer implementiert, aber auch in menschlicher Sprache formuliert werden
- bestimmte Eingabe = bestimmte Ausgabe
Was sind Programmiersprachen?
- ist eine formale Sprache zur Formulierung von Rechenvorschriften, die der Computer ausführen soll
- Anweisungen werden nach einem bestimmten Muster (Syntax) formuliert.
- die erfassten Anweisungen nennt man Quelltext oder Quellcode
- Um auf einem Computer ausgeführt zu werden, muss der Quelltext in Maschinensprache übersetzt werden.
Was ist ein Quelltext resp. Quellcode?
Der Quellcode oder auch Quelltext ist der lesbare Text eines Computerprogrammes oder einer Webseite. Er wird in einer Programmiersprache verfasst und dann vom Computer in Maschinensprache übersetzt. Für das Übersetzen sorgt ein sogenannter Compiler.
Was ist ein Compiler?
Ein Compiler (Kompilierer) ist ein Übersetzungsprogramm, das den Quellcode eines in einer höheren Programmiersprache abgefassten Quellprogramms in eine Maschinensprache übersetzt.
Nenne Unterschiede zwischen der Maschinensprache und höheren Programmiersprachen.
- Maschinensprache
- der Programmcode wird hier Maschinencode genannt.
- ist eine Programmiersprache (Binärcode) der direkt vom Prozessor ausgeführt wird.
- ist eine enorme Menge an Code
- eine einheitliche Maschinensprache gibt es nicht. Soll ein Programm auf unterschiedlichen Prozessortypen laufen, muss für jeden Typ ein geeigneter Maschinencode erzeugt werden.
- Hohe Geschwindigkeit durch maschinennahe Befehle
- Hochsprachen
- fassen mehrere Maschinenbefehle zu einem einem Befehl zusammen
- Befehle müssen durch Compiler in Maschinensprache übersetzt werden
- Syntax an menschliche Sprache angepasst, daher gut verständlich
- Geschwindigkeitsverlust durch kompilieren
- Prozessorunabhängig, kann in
- man ist schneller und benötigt weniger Code
- das gleiche Programm ann auf verschiedene Prozessoren kompiliert werden
Was gibt es für Programmiersprachen? Nenne Beispiele und erläutere deren Eigenschaften.
- Maschinensprache, Assemblersprachen oder C: erlauben eine hardwarenahe Programmierung.
- Höhere Programmiersprachen: erlauben komfortableres, schnelleres Programmieren (C#, Java)
- Skriptsprachen: dienen zur einfachen Steuerung von Rechnern, wie bei der Stapelverarbeitung (Makro)
- Sprachen mit visuellen Programmierumgebung: erleichtern die graphie Gestaltung von Benutzeroberflächen (GUI)
- Grafische Programmiersprachen: sollen einen besonders leichten Zugang zum Programmieren bieten, statt Quelltext zu schreiben, kann das Programm aus Verarbeitungsblöcken zusammengeklickt werden.
Was ist ein (Programmier-)Paradigma?
Paradigma
- ist eine grundsätzliche Denkweise.
Programmierparadigma:
- ist ein fundamentaler Programmierstil
- der Programmierung liegen je nach Design der einzelnen Programmiersprachen verschiedene Prinzipien zugrunde.
- dies soll den Entwickler bei der Erstellung von "gutem" Code unterstützen resp. ihn zu einer gewissen Herangehensweise zwingen.
Nenne zwei systemorientierte Programmiersprachen und erläutere diese.
- Maschinensprache: Hier handelt es sich um Maschinencode der direkt vom Prozessor gelesen werden kann.
- Assemblersprachen: Ist eine sehr rudimentäre Programmiersprache und fasst Maschinencodes in Elementen ( „Mnemonics“) zusammen. Es handelt sich um lesbare Kürzel die einen Befehl einer Assemblersprache repräsentieren.
In welche Bereiche können problemorientierte Programmiersprachen unterteilt werden?
- imperativ = befehlend
- besteht aus Anweisungen, die beschreiben, wie das Programm seine Ergebnisse erzeugt (zum Beispiel Wenn-dann-Folgen, Schleifen, Multiplikationen etc.).
- besteht aus Anweisungen, die beschreiben, wie das Programm seine Ergebnisse erzeugt (zum Beispiel Wenn-dann-Folgen, Schleifen, Multiplikationen etc.).
- deklarativ = beschreibend
- Dabei beschreibt der Programmierer, welche Bedingungen die Ausgabe des Programms (das "Was") erfüllen muss. Wie die Ergebnisse konkret erzeugt werden, wird bei der Übersetzung, zum Beispiel durch einen Interpreter festgelegt. Ein Beispiel ist die Datenbankabfragesprache SQL.
In welche Bereiche kann die imperative Programmiersprache unterteilt werden?
- prozedural:
- prozedurales Programm beschreibt den Weg, auf dem das gewünschte Ziel (=Ergebnis) erreicht werden kann
- Das Gesamtproblem wird als eine Summe von Teilproblemen und deren Lösung aufgebaut. Ein Programm schreitet bei dieser Sichtweise zur Gesamtlösung von Teillösung zu Teillösung (auch Prozedur genannt). Eine Prozedur zielt dabei bereits auf die Wiederverwendbarkeit bei anderen Problemlösungen.
- Vertreter: Pascal, C
- objektorientiert:
- Der OO Ansatz orientiert sich dabei an “Dingen” (Objekte, die gewisse Eigenschaften und ein gewisses Verhalten haben), die modelliert werden müssen.
- Objektorientierte Programmierung lebt von Klassen, ihren untergeordneten Objekten und der Vererbung ihrer Attribute.
- Alles wird durch einzelne separate Objekte beschrieben
- Vertreter: C#, Java, C++
In welche Bereiche kann die deklarative Programmiersprache unterteilt werden?
- logisch:
- beruht auf der mathematischen Logik. Anders als bei der imperativen Programmierung besteht ein Logik-Programm nicht aus einer Folge von Anweisungen, sondern aus einer Menge von Axiomen, welche hier als eine Ansammlung von Fakten oder Annahmen zu verstehen ist. Stellt der Benutzer eines Logik-Programms eine Anfrage, so versucht der Interpreter, die Lösungsaussage allein aus den Axiomen zu berechnen.
- Vertreter: Prolog, SQL
- funktional:
Funktionen werden nicht nur definiert und angewendet, sondern können auch wie Daten miteinander verknüpft, als Parameter verwendet und als Funktionsergebnisse auftreten. Dadurch kann ein funktionales Programm sehr weitreichend neue Berechnungsvorschriften zur Laufzeit zusammensetzen und anwenden.
Vertreter: Logo, Lisp (Bausteine)
Erläutere den Prozess: Vom Quellcode zum ausführbaren Programm. Folgende Begriffe/Abkürzungen sind dabei zu erkläutern:
- MSIL?
- CLR?
- JIT-Compiler?
- Das .NET Framework arbeitet mit einem Intermediationskonzept auf Basis einer Zwischensprache und einer virtuellen Maschine (WM). à WORA = Write Once Run Anywhere
- Der Quellcode einer .NET-Programmiersprache (bspw. C#) wird durch den Compiler in die Zwischensprache kompiliert. Analog verwendete Begriffe für den Zwischencode:
- MSIL = Microsoft Intermediate Language
- CIL = Common Intermediate Language
- Managed Code
- Zur Laufzeit des Programms wird der Zwischencode von einem Just-in-time-Compiler, welcher Bestandteil der CLR (virtuellen Laufzeitumgebung von .NET-Anwendungen) ist, in nativen Code (Maschinencode) übersetzt.
Welche Aussagen zum Algorithmus sind richtig?
Definiere den Begriff Syntax.
- So wie Sie als Mensch nur sinnvoll aufgebaute Sätze verstehen können, versteht ein Computer auch nur Programme, die sinnvoll formulierte Befehle an ihn senden.
- Deshalb ist es wichtig, beim Programmieren die Sprachregeln der jeweiligen Programmiersprache einzuhalten.
- Beim Programmieren legt die Syntax formale Regeln über die zulässigen Sprachelemente einer Programmiersprache fest.
- Außerdem regelt sie, inwiefern diese Elemente in einem Programm verwendet werden dürfen.
Wozu muss der Quellcode kompiliert werden?
- Der Quellcode ist für den Prozessor nicht direkt ausführbar.
- Dieser Quellcode muss daher in eine für den Prozessor verständliche Abfolge von Anweisungen übersetzt werden.
- Im einfachsten Falle ist dies Maschinensprache, welche auf dem Befehlssatz einer bestimmten Rechnerarchitektur beruht.
Warum kompiliert Microsoft den Quellcode in einen Zwischencode welcher sich "Microsoft Intermediate Language" nennt?
Dieses Vorgehen hat zwei Gründe:
- Zum einen möchte man sich von der Hardwareebene soweit distanzieren, dass diese Ebene bei der Ausführung von Code keine Rolle mehr spielt. Dabei kommt eine virtuelle Maschine ins Spiel, welche für jede Betriebssystemplattform zur Verfügung steht. Da der Quellcode in einen Zwischencode übersetzt wird, kann die jeweilige VM diesen Zwischencode mittels einem JIT-Compiler für die jeweilige Zielplattform "fertig" kompilieren. Somit ist derselbe Quellcode auf verschiedenen Plattformen ausführbar.
- Nebst diesem Aspekt vereinheitlicht Microsoft unter der .Net Strategie unterschiedliche Programmiersprachen und Konzepte. Es spielt grundsätzlich keine Rolle, ob der Quellcode in C#, Javascript, Python, C++ oder VisualBasic entwickelt wird, denn das Endergebnis, also der Zwischencode wird grundsätzlich derselbe sein.
Welche Fehlerarten unterscheide man in der Programmierung?
Syntaktische Fehler
- Dies sind Fehler, welche eine Verletzung der „Grammatik“ der Sprache aufweisen. Zum Beispiel, wenn Klammern
oder Strichpunkte vergessen werden, oder definierte Schlüsselworte falsch geschrieben werden.
Logische Fehler
- Diese Fehler beruhen zwar auf der korrekten Syntax, führen aber zu falschen Ergebnissen. Zum Beispiel ein
Fehler in einer Berechnungsformel, falsche Überlegungen in einem Algorithmus, usw. Richtig lästig sind
sporadische logische Fehler, welche nur ab und zu in bestimmten Konstellationen auftauchen.
- Logische Fehler können von der Entwicklungsumgebung nicht entdeckt werden. Daher ist es sehr wichtig, dass
der Quellcode umfassend getestet wird (dazu später mehr in diesem Modul).
Aufgabe A1-2-1
- Button Gelb --> Label Gelbe Hintergrundfarbe
- Button Rot --> ...
- Button Grün --> ...
- Button Blau --> ...
Methode auf entsprechendem Button:
Lbl1.Text = "Gelbe Hintergrundfarbe";
Lbl1.BackColor = Color.Yellow;
Aufgabe A1-2-2
- 1ner Button --> Label mit "." ergänzen
- 2er Button --> Label mit ".." ergänzen
- 3er Button --> ...
Methode auf entsprechendem Button:
Lbl1.Text = Lbl1.Text + "...";
Aufgabe A1-2-3
Buttons rauf, runter, rechts, links, home --> Button verändert Position
Methode auf entsprechendem Button: Bei Positionsveränderung unbedingt X-Y Achse berücksichtigen!
Positionsveränderung:
CmdButton1.Location = new Point (CmdButton1.Location.X + 10, CmdButton1.Location.Y);
home-Button:
Lokal: CmdPoint.Location = new Point(140, 230);
Aufgabe A1-2-4
- Fensterhöhe vergrössern
- Fensterhöhe verkleinern
- Fensterbreite vergrössern
- Fensterbreite verkleinern
Hinweis1: Weil wir die Form (Fenster) verändern muss das Objekt nicht unbedingt nochmals erwähnt werden.
Hinweis2: Man berücksichtige, dass das Fenster zu Beginn zentriert sein soll, und auch zentriert bleiben soll.
- Properties: StartPosition: Center Screen
(Form1.)Size = new Size((Form1.)Size.Width, (Form1.)Size.Height + 10);
(Form1.)Location = new Point((Form1.)Location.X , (Form1.)Location.Y - 5); --> es soll zentriert bleiben
LblPosition.Text = "Position: X: " + (Form1.)Location.X + ", Y:" + (Form1.)Location.Y;
LblDimension.Text = "Breite: X: " + (Form1.)Size.Width + ", Höhe: " + (Form1.)Size.Height;
Aufgabe A1-2-5
Erstellen eines Binärtaschenrechners
- Buttons: 0 0 0 0 0 0 0 0
- Button: Berechnet Dezimalwert
- Button: Setze zurück
Hinweis: Binärcode (Text zur Basis 2!!) in dezimal umrechnen und wieder in Text ausgeben:
LblResultat = Convert.ToString(ConvertToInt16("00000011", 2);
Für jeden Button:
- CmdButton1.Text = "1";
- CmdButton2.Text = "1";
- ...
Berechnung in Dezimal:
- LblResultatDezimal.Text = Convert.ToString(Convert.ToInt32(CmdButton1.Text + ... CmdButton8.Text, 2));
Setze zurück:
- CmdButton1.Text = "0";
- ...
- LblResultat.TExt = "0";
Präfix der Komponente: Button
Cmd
Präfix der Komponente: CheckBox
Chk
Präfix der Komponente: ComboBox
Cmb
Präfix der Komponente: GroupBox
Grp
Präfix der Komponente: Label
Lbl
Präfix der Komponente: ListBox
Lst
Präfix der Komponente: NumericUpDown
Num
Präfix der Komponente: Panel
Pnl
Präfix der Komponente: RadioButton
Rad
Präfix der Komponente: TrackBar
Trk
Präfix der Komponente: TextBox
Txt
Präfix der Komponente: Timer
Tmr