Vorkurs Programmierung Begrüßung und Einführung Prof. Dr. Detlef Krömker Dipl.-Inf. Jörg Demmer Professur für Graphische Datenverarbeitung Institut für Informatik Fachbereich Informatik und Mathematik (12) Hier wird Wissen Wirklichkeit Lernziele Sie sollen in der Lage sein, die Arbeitsplatzrechner in der RBI zu nutzen. Hierzu wird eine (kurze) Einführung in das Linux-Betriebssystem gegeben: ‣ ‣ Geschichte, Grundlagen und Konzepte Wichtige Befehle Weiterhin: ‣ ‣ ‣ 2 Wie funktioniert ein Computer? Wie programmiert man einen Computer? Einführung in Python und IDLE Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit 1 Überblick 1. Linux – eine Einführung 1. Geschichtliches 2. Distributionen 3. Konzepte 4. Befehle 5. Die Arbeitsumgebung in der RBI 2. Computer und Programmiersprachen 1. Analog- und Digitaltechnik 2. Maschinensprache / Assembler 3. Hochsprachen 4. Python 5. Ausblick 3 Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit Von Unix zu Linux I ‣ ‣ ‣ ‣ 4 Entwicklung von Unix begann 1969 an den Bell Laboratories, Tochterfirma von AT&T, durch Ken Thompson, Dennis Ritchie u.a. Erfuhr Mitte der 70er Jahre große Verbreitung im akademischen Bereich, u.a. an der University of California in Berkeley, die es erheblich weiterentwickelte und ihre eigene Unix-Distribution herausbrachte, die Berkeley Software Distribution (BSD) 1979 begann AT&T mit der kommerziellen Vermarktung von Unix und stellte den Quellcode nicht mehr zur Verfügung. Da AT&T auch Rechte an BSD beanspruchte, rief Richard Stallman 1983 das GNU-Projekt (GNU is not Unix) ins Leben Ziel von GNU war die Entwicklung einer vollständig freien Implementierung des POSIX-Standards unter der GNU General Public License (GPL) Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit 2 Von Unix zu Linux II ‣ ‣ ‣ ‣ ‣ 5 Anfang der 90er Jahre waren große Teile des Userlands fertig gestellt. Es fehlte jedoch noch ein Betriebssystemkern. Kern für das Betriebssystem sollte der HURD werden. Entwicklung verlief jedoch sehr schleppend. 1991 begann Linus Torvalds mit der Entwicklung einer TerminalEmulation, die sich schließlich zu einem Betriebssystemkern entwickelte und unter dem Namen Linux veröffentlicht wurde Wegen der pragmatischen Vorgehensweise bei der Entwicklung fand das Projekt schnell viele Anhänger, die sich beteiligten Linux bezeichnet eigentlich nur den Kern, ist aber heute gängige Bezeichnung für ganze Software-Distributionen, bestehend aus Kern, Systemprogrammen (hauptsächlich GNU) und Drittanwendungen Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit Linux-Distributionen Da Linux und GNU im Quellcode zur Verfügung stehen, kann sich prinzipiell jeder die Quellen besorgen und sich sein Betriebssystem selbst zusammenstellen. Aber will man das? www.opensuse.org www.redhat.com www.gentoo.org www.debian.org www.ubuntu.com fedora.redhat.com 6 Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit 3 Linux - Konzepte - Aufbau Applikationen Shell Windowmanager Konsole X-Window-System Userland Kernel Hardware 7 Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit Linux - Konzepte - Benutzer ‣ ‣ ‣ ‣ ‣ 8 Benutzer können Gruppen zugeordnet werden; auf diese Weise sind gruppenbasierte Zugriffsrechte möglich Prozesse laufen im Kontext des Benutzers, der sie gestartet hat Benutzer können Prozesse anderer Benutzer nicht beenden Zugriff nur auf Resourcen, die für den jeweiligen Benutzer freigegeben sind Ausnahme: Systemadministrator „root“ darf alles Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit 4 Linux - Konzepte - Dateisystem / /bin /boot /dev /etc /usr/bin /usr/local/bin Spezialfälle: 9 /home /lib /usr/lib /usr/local /usr/local/lib /media /opt /sbin /usr/sbin /usr/local/sbin /usr /tmp /usr/share /var /usr/src /usr/local/share . Das aktuelle Verzeichnis .. Das Elternverzeichnis Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit Linux - Befehle I ‣ ‣ ‣ ‣ ‣ ‣ 10 Das Wichtigste vorweg: Zu allen Befehlen gibt es ein Online-Manual, das mit dem Befehl man angezeigt werden kann, Bsp: man ls Bei der Benennung von Dateinamen können auch die aus MS-DOS bekannten Wildcards * und ? verwendet werden. cd Verzeichnis - Wechselt das Arbeitsverzeichnis. Ohne Verzeichnisangabe wird in das Homeverzeichnis des Benutzers gewechselt. mkdir [Option] Verzeichnis - Erstellt ein neues Verzeichnis. Option: -p - Erstellt Elternverzeichnisse, wenn nötig. rmdir Verzeichnis - Löscht ein leeres Verzeichnis rm [Option] Dateien … - Löscht Verzeichnisse und Dateien. Optionen: -i, -f, -r Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit 5 Linux - Befehle II ‣ ‣ ‣ ‣ ‣ ‣ 11 cp [Option] alt neu - Dateien kopieren. Option: -R - Rekursiv. –p - Rechte und Attribute erhalten. –d - Verweise erhalten. –a = -dpR. mv alt neu - Dateien umbenennen oder verschieben ln [Option] alt neu - Einen Link erstellen. Option: -s - Einen symbolischen Link erstellen chmod [Option] MODE Datei … - Zugriffsrechte ändern chown [Option] Besitzer[:Gruppe] datei … - Besitzer ändern (nur root). Option: -r - Rekursiv. ls [Option] Datei … - Dateien oder Verzeichnisse anzeigen. Option: -l - ausführliche Anzeige. –a - auch versteckte Dateien anzeigen. Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit Linux - Zugriffsrechte Sehen wir uns die Ausgabe von ls –l mal genauer an … -rwxr-xr-x 2 root system Typ Rechte 12 Besitzer Gruppe Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer 256 Sep 22 15:08 test.txt Größe Zuletzt geändert Dateiname Hier wird Wissen Wirklichkeit 6 Die Linux-Umgebung auf den RBI-Rechnern ‣ ‣ ‣ ‣ 13 Verwendete Distribution ist Fedora Core 5 Standard-Desktopumgebung ist KDE … sehr windowsähnlich, aber man wird früher oder später auf der Kommandozeile landen Starten einer Terminal-Emulation über Startmenü – System – Terminal Wichtig: Rechner nicht ausschalten oder herunterfahren! Abmelden und Bildschirm aus genügt! Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit Die Linux-Umgebung auf den RBI-Rechnern 14 Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit 7 Die Linux-Umgebung auf den RBI-Rechnern 15 Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit Weiterführende Literatur ‣ ‣ ‣ 16 SUSE-Dokumentation, http://de.opensuse.org/Dokumentation Michael Kofler: Linux: Installation, Konfiguration, Anwendung, 7. Auflage, Addison-Wesley 2005 (auch hier in der Bibliothek) Arnold Willemer, Wie werde ich Unix-Guru, Galileo-Computing 2003, http://www.galileocomputing.de/openbook/unix_guru/ Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit 8 Was ist ein Computer? Eine Maschine (heute i.d.R. ein digitalelektronische) zur Speicherung und automatischen Verarbeitung von Daten resp. Informationen (z.B. für mathematische Berechnungen oder allgemeiner Zeichenersetzungen) durch Angabe einer programmierbaren (Rechen-)vorschrift. Die programmierbare, d.h. veränderbare (Rechen-)vorschrift nennen wir Programm Ł Hardware (die Elektronik), das „unveränderbare“ Ł Software (das Programm), das „veränderbare“ 17 Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit Digitalcomputer - Analogcomputer Unsere Definition ist eingeschränkt auf Digitalrechner, also solche Rechner, die mit diskreten, endlichen Zahlenmengen oder Zeichenmengen arbeiten (Informationstragenden Größen = Daten) Historisch gibt es eine andere Art: die Analogcomputer oder Analogrechner: Sie repräsentieren ihre Daten nicht als diskrete Werte, sondern als kontinuierliche – eben analoge – Größen, zum Beispiel in Form von geometrischen Längen oder Winkeln (mechanisch, z.B. Rechenschieber, Planimeter) oder elektrischen Spannungen oder Strömen. 18 Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit 9 Digitalcomputer ‣ ‣ ‣ ‣ ‣ 19 Wenn wir heute „digital“ sagen, meinen wir damit Rechner, die auf der Grundlage eines dualen Stellenwertsystems arbeiten Dieses kennt nur die Ziffern 0 und 1, im Computer z.B. repräsentiert durch „Strom“ und „kein Strom“. Die kleinste Speichereinheit, die Information speichern kann, ist das Bit. Es kann die Zustände 0 und 1 annehmen. Acht Bit fasst man zusammen zu einem Byte. Damit lassen sich 28 = 256 verschiedene Zustände darstellen. Ein (Maschinen-)Wort ist die Anzahl der Bits, die ein Prozessor in einem Arbeitsschritt verarbeiten kann. Bezeichnet zugleich den maximal adressierbaren Speicher. Im PC-Bereich sind noch 32 Bit üblich, aber der Sprung auf 64 Bit steht bevor. Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit Maschinensprache Die Sprache, die der Rechner unmittelbar versteht, ist für den Menschen unverständlich. Es handelt sich um Binärcode, den der Prozessor direkt ausführen kann. Es wird ein Wort aus dem Speicher gelesen. Dieses besteht aus einer Instruktion und Argumenten. Der Prozessor führt die Instruktion aus, und lädt das nächste Wort aus dem Speicher. 20 Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit 10 Beispiel 21 Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit Assembler ‣ ‣ ‣ ‣ 22 Da nur wenige Erleuchtete in der Lage waren, in Maschinensprache zu programmieren, wurde die Maschinensprache durch Wahl einer geeigneten Repräsentation lesbarer gemacht. Befehle werden durch Mnemonics repräsentiert, für Register Bezeichner verwendet Nutzung von Sprungmarken und Kommentaren ist ebenfalls möglich. Ein Assembler übersetzt die Mnemonics in Maschinensprache Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit 11 Beispiel 23 Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit Hochsprachen Schon einfacher, aber: ‣ ‣ Immer noch sehr maschinennah, wenig abstrakt Schwer zu portieren: Jede Architektur hat ihre eigene Assemblersprache Eine höhere Abstraktion ist erwünscht, damit der Programmierer seine Zeit damit verbringen kann, Probleme zu lösen, nicht CPU zu spielen und wie eine Maschine zu denken. Außerdem will niemand dasselbe Programm zweimal schreiben. Daher sollten Programme leichter portierbar sein. 24 Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit 12 Compiler ‣ ‣ ‣ ‣ ‣ 25 Bei einer Hochsprache wird ein Programm in einer wesentlich abstrakteren, für den Menschen leichter verständlichen Form repräsentiert. Die Übersetzung in Maschinencode wird vom Rechner übernommen. Dies erledigt der Compiler. Der Compiler kann direkt Maschinencode erzeugen (plattformabhängig) oder plattformunabhängigen Bytecode, der zur Laufzeit in Maschinencode umgewandelt wird (Just-In-Time-Compiler) Beispiele für compilerbasierte Programmiersprachen: C, C++, FORTRAN Bytecode-Sprachen: Java, .NET-Sprachen Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit Interpreter Ein Interpreter führt ein Programm direkt aus. Der Schritt des vorgelagerten Übersetzens entfällt; jeder Befehl wird direkt ausgewertet und in Maschinensprache übersetzt. Vorteile: Kein zeitaufwändiges Übersetzen; die Auswirkungen von Änderungen können sofort getestet werden; hochgradig plattformunabhängig und portabel. Nachteil: Programme laufen langsamer als vorkompilierter, optimierter Maschinencode. Beispiele: Basic, Python 26 Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit 13 … und damit zu Python ‣ ‣ ‣ ‣ ‣ ‣ ‣ 27 Objektorientierte „Very high level“-Sprache Schwerpunkt liegt auf Übersichtlichkeit und Einfachheit Kostenlos verfügbar Homepage: http://www.python.org Versionen verfügbar für Windows, Linux uvm Entwicklungsumgebung IDLE enthalten Laden Sie Python herunter und experimentieren Sie zu Hause! Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit Syntax ‣ Datentypen werden implizit erkannt, müssen nicht deklariert werden: Dynamische Typbindung: a = 2 # Variable a hat jetzt einen Integerwert a = „Hallo!“ # Jetzt ist a eine Zeichenkette Zulässig, aber schlechter Stil. ‣ ‣ 28 Kommentare werden mit einem # eingeleitet. Alles, was in einer Zeile danach folgt, wird vom Interpreter ignoriert Kommentieren Sie Ihre Programme! Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit 14 Syntax ‣ Blöcke werden durch Einrücken gekennzeichnet: if 1 == 1: print „Es gilt: 1 = 1“ print „Stimmt doch, oder?“ elif 1 == 0: print „Es gilt: 1 = 0“ print „Das kann nicht sein.“ else: print „Es gilt nicht: 1 = 1!“ print „Kann das sein?“ print „Hier geht es weiter“ 29 Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit Syntax Einige Operatoren: + Addition bzw. Konkatenation - Subtraktion * Multiplikation / Division % Rest ** Exponentiation = Zuweisung == Vergleichen: Ist gleich > Vergleichen: Ist größer < ist kleiner >= Vergleichen: Ist größer oder gleich >= ist kleiner oder gleich Präzedenz: Wie in der Mathematik! 30 Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit 15 Daten einlesen Wir haben jetzt schon gesehen, wie man etwas ausgeben kann (mit print). Aber wie liest man Daten ein? Eingabe = raw_input() Print „Die Eingabe war “ + Eingabe Oder auch: Eingabe = raw_input(„Geben Sie etwas ein: “) Print „Die Eingabe war “ + Eingabe 31 Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit Zusammenfassung Wir können jetzt… ‣ ‣ 32 Grundlegende Dateioperationen unter Unix/Linux durchführen Einfache Batchprogramme unter Python schreiben und dabei Daten von der Konsole einlesen, auf die Konsole ausgeben, einfache arithmetische Operationen durchführen und dabei Bedingungen auswerten. Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit 16 Ausblick Wir müssen noch … ‣ ‣ ‣ ‣ ‣ ‣ 33 die grundlegenden numerischen Datentypen und Zeichenketten genauer kennenlernen lernen, wie man Anweisungen automatisch wiederholen lässt, bis eine Bedingung erfüllt ist lernen, wie man häufig benötigte Funktionalität auslagert und wiederverwendbar macht die Klassenbibliothek von Python genauer kennenlernen auf Fehlersituationen reagieren können uns einen grundlegenden Überblick über objektorientierte Programmierung verschaffen Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit Vielen Dank für Ihre Aufmerksamkeit! 34 Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit 17 Fragen? 35 Vorkurs Programmierung WS 2006/2007 Dipl.-Inf. Jörg Demmer Hier wird Wissen Wirklichkeit 18