I) Grundlagen der Programmierung. II) Erweiterte Grundlagen der Programmierung

Ähnliche Dokumente
Allgemeines zu Programmieren I

Allgemeines zu Programmieren I

Softwareentwicklung 1

Vorkurs Informatik WiSe 17/18

Praktische Informatik 1

Vorlesung Objektorientierte Softwareentwicklung. Kapitel 0. Java-Überblick

Programmieren I. Administratives / Java Installation. Thomas Vetter, Brian Amberg, Andreas Forster. 21. September 2010 UNIVERSITÄT BASEL

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Abschnitt 2: Daten und Algorithmen

Java Datentypen und Variablen

Aufbau und Funktionsweise eines Computers

Ein erstes Java-Programm

Programmieren I. Prinzipieller Ablauf. Eigenschaften von JAVA. Source-Code Javac Bytecode. Java Virtual Machine (Java, Browser, Appletviewer)

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Einführung in C. EDV1-04C-Einführung 1

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Grundlagen von JAVA Hello World in JAVA Elementare Datentypen. Grundlagen von JAVA Hello World in JAVA Elementare Datentypen

Einführung in die Programmierung 1

Einstieg in die Informatik mit Java

Einführung in Java. Ausgewählte Quellen zu Java

Einstieg in die Informatik mit Java

II.1.1. Erste Schritte - 1 -

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Grundlagen der Informatik 0

Vorlesung Informatik II

Grundlagen der OO- Programmierung in C#

Java I Vorlesung Imperatives Programmieren

Sprechen Sie Java? Hanspeter Mössenböck. Tm\ dpunkt.verlag. Eine Einführung in das systematische Programmieren

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

J.5 Die Java Virtual Machine

Übung zur Vorlesung Strukturiertes Programmieren WS 2014/15. Übungsblatt 1: JAVA - Erste Schritte Abgabe: Besprechung:

Algorithmen und Datenstrukturen

Werkzeuge zur Programmentwicklung

Einführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 1

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

1. Formulieren Sie den Algorithmus <Bedienung eines Getränkeautomaten> nach den oben genannten Kriterien.

4 Objektorientierte Programmierung mit Java 4.1 Java-Grundlagen

Einführung in die Programmierung mit Java

Java: Kapitel 1. Überblick. Programmentwicklung WS 2008/2009. Holger Röder Holger Röder

Klassenvariablen, Klassenmethoden

Programmiervorkurs. Organisation: Steffen Gebert, Alexander Wolff. Tutoren: Jürgen Zöller, Jonathan Stoll. Wintersemester 2012/2013

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

1. Referenzdatentypen: Felder und Strings

Beispiel: Temperaturumwandlung. Imperative Programmierung. Schwerpunkte. 3. Grundlegende Sprachkonstruktionen imperativer Programme

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Vorkurs Informatik WiSe 15/16

Software Entwicklung 1

Tutorium Java Ein Überblick. Helge Janicke

Einstieg in die Informatik mit Java

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO

Grundlagen der Programmierung Prof. H. Mössenböck. 2. Einfache Programme

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Vorkurs: Java-Einführung

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

Einführung in die Programmierung mit VBA

Java: Der Einstieg. Algorithmen und Datenstrukturen II 1

Aufbau und Funktionsweise eines Computers

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

3. Grundlegende Sprachkonstruktionen imperativer Programme

Einführung in die Programmierung für NF. Algorithmen, Datentypen und Syntax

Übersicht. Vorstellung des OO-Paradigmas

Softwareentwicklung 1

Programmierkurs C++ Variablen und Datentypen

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Kopf und Rest einer Liste (head and tail): Trennung durch. Listenkopf: kann mehrere Elemente umfassen

Willkommen zur Vorlesung. Algorithmen und Datenstrukturen

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Objektorientierte Programmierung Studiengang Medieninformatik

Zwischenklausur Informatik, WS 2016/17. Lösungen zu den Aufgaben

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Informatik I - Einstiegskurs

Programmieren, Wintersemester 13/14 Übungsleiter: Sebastian Ebers Aufgabenblatt 3

Übung Praktische Informatik I

Berner Fachhochschule Hochschule für Technik und Informatik HTI. Kapitel 1. Einstieg in Java. Dr. Elham Firouzi

Algorithmen und Datenstrukturen II

Motivation und Überblick

Institut für Programmierung und Reaktive Systeme 20. November Programmieren I. 4. Übungsblatt

Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Umsetzung einer Klassenkarte in einer Programmiersprache

Grundlagen der Informatik für Ingenieure I

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 3. Grunddatentypen, Ausdrücke und Variable

Java Einführung Programmcode

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Programmierung 1 für Wirtschaftsinformatik Wintersemester 2015/16

Die Programmiersprache C

Grundlagen von C# - 1

Kapitel 3: Variablen

Elementare Konzepte von

Strukturiertes Programmieren

Methoden und Wrapperklassen

Praktische Softwaretechnologie Vorlesung 2

Transkript:

Allgemeines zu: I) Grundlagen der Programmierung VV-Nr.: 10890-01 II) Erweiterte Grundlagen der Programmierung VV-Nr.: 45398-01 Webseiten zur Vorlesung http://informatik.unibas.ch/hs2016/ ->Grundlagen der Programmierung hier gibt es alle Folien zur Vorlesung aber auch sonstige aktuelle Informationen -> Erweiterte Grundlagen der Programmierung Übungsblätter aber auch sonstige aktuelle Informationen Page 1

Lernziele A) Grundlagen der Programmierung Die Programmiersprache Java kennen. Kleine Programme lesen und verstehen können und kurze Programmteile selbst schreiben und entwickeln können. B) Erweiterte Grundlagen der Programmierung Ganze Programme in Java selbst schreiben können und Erfahrung in der Umsetzung von Problemstellungen zu lauffähigen Programmen sammeln. Überblick zur Vorlesung Inhalt: Anweisungen und Datenstrukturen Objektorientiertes Programmieren Programmentwurf Rekursion Fehlerbehandlung Generics Verwenden von Java-API Bibliotheksfunktionen Page 2

Durchführung der Übungen A) Grundlagen der Programmierung Alle Übungen werden über ein Web-Interface in einen Web-Browser durchgeführt. Die Auswertung und die Korrekturhilfen werden automatisch erstellt. Die vereinbarten Termine bei Tutoren können zu Fragen und Hilfestellungen genutzt werden B) Erweiterte Grundlagen der Programmierung Der vollständiger Programmkode muss auf einen Server geladen werden und dann einem Tutor vorgeführt werden. Detaillierte Anweisungen finden sie auf den Webseiten zu den Kursen. Literatur Folien zur Vorlesung werden im Web abgelegt Folien allein sind NICHT ausreichend!! Bücher: 1) Sprechen sie Java, Hanspeter Mössenböck dpunkt Verlag etwa sfr 48,- 5. Auflage ( 2.Auflage) Page 3

Das Buch der Entwickler Arnold, K., Gosling, J. und Holmes, D. (2005). The Java Programming Language. Addison-Wesley. Vierte (dritte) Auflage. Die originale Referenz, die auch einen kompakten Überblick und ein Nachschlagen während des Programmierens ermöglicht. Setzt aber oft schon Standardwissen der Informatik voraus. Gegen Ende der Vorlesung sehr geeignet!! Weitere Literaturempfehlungen Eine weitere Literaturempfehlung: "Thinking in Java" von Bruce Eckel kostenlos im Internet als pdf-datei http://www.mindview.net/books/tij/ Page 4

Einschub: Ein erstes Java Programm. Allgemeines zu Java Java ist eine objektorientierte Programmiersprache in der Tradition von C und C++. Die Java-Syntax lehnt sich an C an, nimmt aber einige deutliche Bereinigungen vor z. B. Abwesenheit von goto und dem Datentyp Zeiger (pointer). Die Erweiterung um Objekte geschieht ähnlich wie bei C++ Allerdings gibt es doch einige Unterschiede: In erster Näherung könnte man sagen, dass Java aus der riesigen Vielfalt der C++ Konstrukte eine sinnvolle Auswahl trifft und gleichzeitig einiges umstellt und bereinigt. Page 5

Home Page von Java Java wurde bei der Firma SUN Microsystems entwickelt Von James Gosling Ursprünglich für die Programmierung von in Haushaltselektronik eingebetteten Prozessoren Die zentrale Internet Site der Firma Oracle zum Thema Java ist http://www.oracle.com/technetwork/java/index.html Besonders empfehlenswert (und sehr empfohlen zur Ergänzung des Selbststudiums): Das offizielle Java-Tutorial: http://docs.oracle.com/javase/tutorial/ Pflicht für die Teilnehmer der Erweiterten Grundlagen der Programmierung Installation der Entwicklungsumgebung Die Standard-Entwicklungsumgebung von SUN (z. Z. Version 1.8) kann auch direkt im Internet unter der folgenden URL heruntergeladen werden http://www.oracle.com/technetwork/java/index.html Das Java Tutorial von Campione et al. (2001) enthält detaillierte Anleitungen zur Installation des SDK auf UNIX / LINUX, Apple Macintosh und Microsoft Windows Plattformen Hilfe zur Installation im Netz: ( muss Ende 2. Woche laufen ) http://www.torsten-horn.de/techdocs/java-install.htm http://de.wikibooks.org/wiki/java_standard:_einrichten_der_programmi erumgebung Page 6

Programmentwicklung : Editieren Der Quellcode eines Programms kann mit jedem beliebigen Editor erstellt werden. R. Manthey Editoren Programme zum Schreiben und Verändern (Editieren) von Text- Dateien heißen Editoren. Quellcode-Dateien von Java-Programmen sind Text-Dateien Benutzen Sie Ihren Lieblingseditor Windows: Notepad++, Geany, Jedit... Linux: vi, VIM, ( EMACS), Geany,... Max OSX: TextWrangler,. Page 7

Programmiervorgang für Java R. Manthey Java: Plattformunabhängiges Compilieren R. Manthey Page 8

Programmiervorgang für Java R. Manthey Programmiervorgang für Java R. Manthey Page 9

Java Bibliotheken Zu Java gehört außerdem eine Sammlung von standardisierten Bibliotheken, die häufige Programmieraufgaben stark erleichtern. Beipiele solcher Bibliotheken sind java.applet für Programme, die in Web-Browsern laufen sollen java.awt für das Erzeugen graphischer Benutzeroberflächen java.math für Arithmetik auf beliebig langen Zahlen (wichtig z. B. für die Kryptographie), java.net zum Betreiben von Verbindungen über das Internet java.rmi zum Aufrufen von Methoden auf entfernten Rechnern... Grundstruktur von Java- Programmen class ProgramName { public static void main (String[] arg) { Text muß in einer Datei namens ProgramName. java stehen... // Deklarationen... // Anweisungen } } Beispiel class MyFirstProgram{ public static void main (String[] arg) { System.out.println( Hallo World! ); } } Text steht in Datei MyfirstProgram. java Page 10

Übersetzen und Ausführen mit JDK class MyFirstProgram{ public static void main (String[] arg) { System.out.println( Hallo World! ); } } Text steht in Datei MyfirstProgram. java Übersetzen C:\ cd MySamples C:\ javac MyFirstProgram. java wechselt ins Verzeichnis mit der Quelldatei erzeugt Datei MyFirstProgram.class Ausführen C:\ java MyFirstProgram Hallo World! ruft main- Methode der Klasse MyFirstProgram auf Pragmatisches zur Programmierung in Java Page 11

Pragmatisches zur Programmierung in Java Pragmatisches zur Programmierung in Java obligatorischer Eingabeparameter (niemals weglassen). Array von Zeichenreihen Dient zur Übermittelung von Eingaben beim Aufruf der Klasse «von aussen». Kann innerhalb von main ignoriert werden Page 12

Beispiel: Kommandozeilenparameter class Program2{ public static void main (String[] arg) { System.out.println(arg[0] + _ + arg[1]); } } Ein Aufruf: java Program2 Hallo World Concatenation von Zeichenketten erzeugt dann Hallo_World Grundlagen der Programmierung: Programmieren in Java Page 13

Was heisst Programmieren? Exaktes Instruieren eines Computers, eine bestimmte Aufgabe zu lösen. Aufgabe Vorlesung Idee zur Vorgehensweise Algorithmus Mensch Maschienenlesbare Kodierung (Programm) Übersetzung in Maschinensprache Compiler Lösung der Aufgabe durch den Computer Hardware Organisation der Hardware Architektur eines einfachen Computersystems mit Bus Page 14

System-Architektur der Hardware Architektur eines PC Systems mit mehreren Bussen an Brücken Software wird unterschieden in Anwendersoftware erlaubt die Lösung allgemeinster Aufgabenstellungen. z. B. Textverarbeitung, Tabellenkalkulation, Bildbearbeitung, Buchhaltung, Produktionsplanung, Lohn und Gehaltsabrechnung, Spiele... Systemsoftware hilft beim Betrieb des Rechners und bei der Konstruktion der Anwendersoftware. Systemsoftware umfasst neben Datenbanksystemen, Übersetzern (compiler) etc. in jedem Fall das Betriebssystem. Page 15

Betriebssystem Das Betriebssystem (operating system) isoliert die Anwendersoftware von der Hardware: das Betriebssystem kommuniziert mit der Hardware und die Anwendersoftware auf dem Betriebssystem. Das Betriebssystem verwaltet die Ressourcen der Hardware (wie z. B. Geräte, Speicher und Rechenzeit) und es stellt der Anwendersoftware eine abstrakte Schnittstelle (die Systemaufrufschnittstelle) zu deren Nutzung zur Verfügung. Dadurch vereinfacht es die Nutzung der Ressourcen und schützt vor Fehlbedienungen. Betriebssysteme, die es mit diesem Schutz nicht so genau nehmen, führen zu häufigen Systemabstürzen (system crash). JAVA Kern aller heutigen Computer Grundsätzlicher Aufbau verschiedener Rechnersysteme ist ähnlich: Wahlfreier Zugriff Von Neumann Architektur Page 16

Speicher Kleinste Speichereinheit hat 2 Zustände 1 Bit Zustände werden i.a. mit 0 und 1 bezeichnet Mit 2 Speichereinheiten 2 2 =4 Zustände darstellbar Mit 8 Bit 2 8 =256 Zustände darstellbar 8 Bit = 1 Byte Heutzutage sind Bytes die kleinsten adressierbaren Speichereinheiten Kleinere Einheiten müssen aus einem Byte extrahiert werden z.b. 0010 0101 Speicher & Adressierung Von Neumann Architektur Adresse Inhalt (byte) 1. 2. 3. 4. 5. 6. 7... 0101 0010 1100 1100 1001 1000 0000 0100 1111 1001 0010 1011... Wieviel Speicheradressen hat ein Computer? Maximal soviel der Datenbus codieren kann. PC s mit 32 Bit Datenbus 2 32 = 4 *2 30 = 4 *2 10 *2 10 *2 10 = 4 Giga Zustände (Adressen) bei 64 Bit Datenbus 2 64 = 2 34 Giga 10 11 Giga Zustände (Adressen) Page 17

Daten und Befehle Daten Menge addressierbarer Speicherzellen Daten sind binär gespeichert (z.b. 17 = 10001) Binärspeicherung ist universel (Zahlen, Texte,Filme, Ton ) 1 Byte := 8 Bit 1 Wort := 2 Byte (z.t. auch 4 Byte) Befehle Operationen mit den Speicher Zellen Maschinensprache Hochsprache ACC x // Lade Zelle x z = x + y ACC ACC + y // Addiere y z ACC // Speichere Ergebnis in Zelle z Variablen und der Typ von Variablen Menschen benennen Dinge gerne mit Namen statt mit numerischen Adressen, so kennt jede Programmiersprache das Konzept einer Variablen als abstraktes Analogon zu einer Speicherstelle. Eine Variable hat einen symbolischen Namen, hinter dem eine Adresse verborgen ist, und der Wert (value) der Variable ist der Wert des dort gespeicherten Bitmusters. Um diesen erschließen zu können, hat die Variable einen Typ (type), der bei ihrer Vereinbarung angegeben werden muss. Page 18

Binärcodierung elementarer Datentypen Unterscheide Zahl-Wert Zahl-Bezeichner Zu ein- und demselben Zahl-Wert kann es verschiedene Bezeichner geben, z. B. Fünf, 5, V, 101 Da es unendlich viele Zahl-Werte gibt, ist es sinnvoll, sich eine Systematik zur Erzeugung von eindeutigen Bezeichnern zu schaffen Die auch das Rechnen mit Zahlen unterstützt Verwendung von römischen Zahlen bietet keine gute Unterstützung Binärcodierung elementarer Datentypen Ein Zahlsystem (number system) besteht aus endlich vielen Ziffern (digits) und einer Vorschrift, wie Zeichenreihen, die aus diesen Ziffern gebildet wurden, als Zahl-Werte zu interpretieren sind Arabische Zahlsysteme zur Basis b Natürliche Zahl z wird geschrieben als Polynom Dabei Page 19

Datentypen & Variable Adresse 1. 0000 0000 0000 0000 0000 0000 0000 0000 2. 0000 0000 0000 0000 0000 0000 0000 00001 3. 0000 0000 0000 0000 0000 0000 0000 00010 4. 0000 0000 0000 0000 0000 0000 0000 00011 5. 0000 0000 0000 0000 0000 0000 0000 00100 6. 0000 0000 0000 0000 0000 0000 0000 00101 7. 0000 0000 0000 0000 0000 0000 0000 00111.. Inhalt (byte) 0101 0010 1100 1100 1001 1000 0000 0100 1111 1001 0010 1011... Wie ist der Inhalt des Speichers zu interpretieren? Dem Bitmuster ist seine Bedeutung (Text, Zahlen oder Musik) nicht fest zugeordnet. Je nach Variablendefinition müssen unterschiedlich viele Bytes interpretiert werden und gleiche Bitmuster können unterschiedliche Bedeutungen haben! Variablen haben immer einen Datentypen Elementare Datentypen in Java byte 8 Bit Zahl -2 7... 2 7 1 ( -128,..., 127 ) short 16 Bit-Zahl -2 15... 2 15 1 ( -32768,..., 32767 ) int 32 Bit-Zahl -2 31... 2 31 1 ( -2 147 483 648,..., 2 147 483 647 ) long 64 Bit-Zahl -2 63... 2 63 1 float double 32 Bit IEEE-754-1985 Gleitkommazahl 64 Bit IEEE-754-1985 Gleitkommazahl char boolean 16 Bit Unicode Wahrheitswert, false oder true Page 20

Gleitkommazahlen engl. Floating-Point Darstellung einer Floating-Point-Zahl: Floating-Point-Zahlen nach IEEE 754-1985 32 Bit float 64 Bit double Algorithmus Schrittweises, präzises Verfahren zur Lösung eines Problems Problem: Summiere die Zahlen von 1 bis max. i max sum i i 1 Name Parameter SummiereZahlenVon1bismax ( max, sum) 1. sum 0 2. zahl 1 3. Wiederhole, solange zahl max 3.1 sum sum + zahl 3.2 zahl zahl + 1 Folge Programm = Beschreibung eines Algorithmus in einer Programmiersprache Page 21

Variablen Sind benannte Behälter für Werte x y 99 3 Können ihren Wert ändern x x + 1 x 100 Haben einen Datentyp = Menge erlaubter Werte Variablentyp Werte Zahl 17 54... - in eine Zahlenvariable passen nur Zahlen Zeichen 'a' 'x'... - in eine Zeichenvariable passen nur Zeichen Anweisungen Wertzuweisung x x + 1 1. Werte Ausdruck aus 2. Weise seinen Wert der Variablen zu: Variable Ausdruck Anweisungsfolge (auch Sequenz) x 2 y 4 x x + 1 z x + y "Ablaufdiagramm" x =3, y =4, z= 7 Assertion Assertion (Zusicherung) Aussage über den Zustand des Algorithmus an einer bestimmten Stelle Page 22

Anweisungen Auswahl (auch Verzweigung, Abfrage, Selektion) Beispiel: Suche das Minimum der zwei Zahlen x und y. j x < y? n x y min x min y min= Minimum von x und y Anweisungen Wiederholung (auch Schleife, Iteration) Beispiel: Suche die grösste ganze Zahl n mit 2 n kleiner oder gleich x. n 0 x > 1? ja x x / 2 n n + 1 nein n 0 x > 1 x x / 2 n n + 1 x 1 n = log2 x Alternative Darstellung x 1 n = log2 x Page 23

Beispiel: Vertausche zwei Variableninhalte Swap ( x, y) Schreibtischtest x y h h x x y y h 3 2 2 3 3 Beispiel: Bestimme Maximum dreier Zahlen Max ( a, b, c, max) j a > b? n a b j a > c? n c a > b j b > c? n c b a max a max c max b max c Page 24

Beispiel: Euklidscher Algorithmus Berechnet den größten gemeinsamen Teiler zweier Zahlen x und y GGT ( x, y, ggt) rest Rest von x / y rest 0 x y y rest rest Rest von x / y ggt y rest = 0 Schreibtischtest x y rest 28 20 8 20 8 4 8 4 0 Warum funktioniert dieser Algorithmus? (ggt teilt x) & (ggt teilt y) ggt teilt (x - y) ggt teilt (x - q* y) ggt teilt rest ggt( x, y) = ggt( y, rest) Beispiel: Berechne Quadratwurzel von x 0 a root x 1. Näherung: root x / 2 a root a x / root 2. Näherung: root (root + a) / 2 a x / root SquareRoot ( x, root) root x / 2 a x / root a = root * root (root + a) / 2 a x / root a * root = x a * root = x a * root = x & a = root root * root = x Schreibtischtest x root a 10 5 2 3,5 2,85471 3.17857 3,14607 3.16232 3,16223 3.16228 3,16228 Kommazahlen sind meist nicht exakt gleich, daher besser a- root > 0.0000001 Page 25