TAG 4: SORTIEREN VON ARRAYS, OBJEKTORIENTIERTE PROGRAMMIERUNG Brückenkurs Programmierung SoSe 17

Ähnliche Dokumente
TAG 3: FUNKTIONEN, EVENTS, ARRAYS, EXKURS: SPEICHERVERWALTUNG Brückenkurs Programmierung SoSe 16

Bru ckenkurs Programmieren

TAG 2: ANIMTATIONEN UND SCHLEIFEN Brückenkurs Programmierung WiSe 15/16

PROCESSING KLASSEN UND OBJEKTE. Created by Michael Kirsch & Beat Rossmy

Algorithmen und Datenstrukturen II

Bru ckenkurs Programmieren

Gliederung. Algorithmen und Datenstrukturen II. Java: Objektorientierung. Java: Objektorientierung. Objektorientierung in JAVA. D.

1 Klassen und Objekte

Created by Michael Kirsch & Beat Rossmy

Repetitorium Informatik (Java)

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

Objektorientierte Programmierung Studiengang Medieninformatik

Probeklausur Java Einführung in die Informatik. Wintersemester 2017/2018

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

Java Referenzdatentypen genauer betrachtet

Probeklausur Java Einführung in die Informatik. Wintersemester 2016/2017

Einführung in die Programmierung für NF MI. Übung 07

Implementieren von Klassen

Objektorientierte Programmierung

Objektorientierte Programmierung und Klassen

PROCESSING ELTERN UND KINDER. Created by Michael Kirsch & Beat Rossmy

Fragen zur OOP in Java

Java Zusammenfassung. Basisdatentypen ganzzahlig: Byte, Short, Integer, Long Fließkomma: Float, Double Zeichen: Character Wahrheitswerte: Boolean

CS1005 Objektorientierte Programmierung

n 1. Grundzüge der Objektorientierung n 2. Methoden, Unterprogramme und Parameter n 3. Datenabstraktion n 4. Konstruktoren n 5. Vordefinierte Klassen

Tag 8 Repetitorium Informatik (Java)

Propädeutikum Programmierung in der Bioinformatik

7. Objektorientierung. Informatik II für Verkehrsingenieure

CS1005 Objektorientierte Programmierung Bachelor of Science (Informatik)

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Objekte und Klassen. INE2 M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert, E.

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Created by Michael Kirsch & Beat Rossmy

Software Entwicklung 1

Allgemeines - Prinzipien

PROCESSING STRUKTUR UND INPUT. Created by Michael Kirsch & Beat Rossmy

Der Ball kann angezeigt werden: anzeigen( ) {... } Der Ball kann z.b. seine Größe verändern: groesseaendern(int veraenderung) {... } usw.

PROCESSING SCHUBLADEN UND ZEICHEN. Created by Michael Kirsch & Beat Rossmy

Erste Java-Programme (Scopes und Rekursion)

Objektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein

Programmieren I. Arrays Heusch 7.2 Ratz Institut für Angewandte Informatik

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

Prinzipien der objektorientierten Programmierung (OOP)

Diana Lange. Generative Gestaltung Die Processing Bibliothek

6 Speicherorganisation

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Vorlesung Programmieren

Tag 7 Repetitorium Informatik (Java)

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

TAG5: ABSCHLUSS Brückenkurs Programmierung SoSe 17

Klausur Grundlagen der Programmierung

Grundelemente objektorientierter Sprachen (1)

3.3. Rekursive Datentypen

Programmierung 1 Studiengang MI / WI

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 2: Einstieg in die OOP

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

4. Objektorientierte Programmierung mit C++

Einstieg in die Informatik mit Java

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

1 Einleitung Generizität Syntax... 2

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Programmieren I. Arrays Heusch 7.2 Ratz Institut für Angewandte Informatik

PROCESSING EINE EINFÜHRUNG IN DIE INFORMATIK. Created by Michael Kirsch & Beat Rossmy

Javakurs für Anfänger

Grundelemente objektorientierter Sprachen (1)

Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 8. Blatt Für den 16. und

Grundelemente objektorientierter Sprachen (1)

Test zu Grundlagen der Programmierung Leitung: Susanne Guth/Michael Hahsler. 31. Jänner 2003

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Grundlagen der Informatik 0

Folienpaket 7 Themenschwerpunkte: Methoden in OOP /2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Martin Unold INFORMATIK. Geoinformatik und Vermessung

6 Speicherorganisation

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Probeklausur Java Einführung in die Informatik. Wintersemester 2017/2018. Musterlösung

Teil 2: Weitere Aspekte der Objektorientierung

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

Objektorientierung (OO)

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Java Einführung Methoden. Kapitel 6

Algorithmen und Programmierung II

Javakurs für Anfänger

Java für Bauingenieure

Fakultät IV Elektrotechnik/Informatik

Grundlagen der OO- Programmierung in C#

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

Transkript:

TAG 4: SORTIEREN VON ARRAYS, OBJEKTORIENTIERTE PROGRAMMIERUNG Brückenkurs Programmierung SoSe 17 Toni Barthel

Organisatorisches I Themen: Tag 1: Variablen Operatoren, Verzweigungen Tag 2: Animationen, Schleifen Tag 3: Funktionen, Events, Arrays, Exkurs: Speicherverwaltung Tag 4: Sortieren von Arrays, Objektorientierte Programmierungm Geheimnisprinzip Tag 5: Ausblick auf Java und C Heute: Wiederholung Tag 3 etwas mehr Praxis

Organisatorisches II Tagesablauf: Zwei Vorlesungsblöcke (ca. 90min), 15min Kaffeepause Neuankömmlinge melden sich bitte in der Pause bei mir Ankündigungen Arbeitsergebnisse auf Kursseite hochladen Software der Hochschule Office 365 kostenfrei für angehörige der Hochschule Dreamspark

TAG 4.0: WIEDERHOLUNG Brückenkurs Programmierung SoSe 17 Toni Barthel

WDH: Funktionen Erläutern Sie das Prinzip der Modularität. Dieses Prinzip setzt voraus, das komplexe Aufgaben in ihre Grundbestandteile unterteilt werden um die kleineren Teilaufgaben später einfach wiederverwenden zu können Modularität. Formulieren Sie beliebige Funktion/Methode ohne Rückgabewert. void beliebigefunktion() { Wie viele Variablen kann ein eine Funktionsdefinition enthalten? beliebig viele. Welche Rückgabewerte kann eine Funktion annehmen? alle primitiven Datentypen sowie Referenzdatentypen.

WDH: Funktionen/Events in Processing I Welche Mouse-Events kennen Sie? void mouseclicked() { // Aktion wenn die Maus geklickt wurde void mousepressed() { // Aktion wenn die Maus geklickt ist void mousereleased() { // Aktion wenn eine Maustaste losgelassen wird. void mousemoved() { // Aktion wenn sich die Maus bewegt Auch wenn ein Stück Code nur einmal aufgerufen wird, kann es Sinn machen dieses in eine eigene Funktion auszulagern, um den Code lesbarer zu machen und die Fehlersuche zu erleichtern. void mousedragged() { // Aktion wenn die Maus geklickt ist und bewegt wird

WDH: Funktionen/Events in Processing II Wann und wie oft wird die Funktion setup() ausgeführt? Die Funktion setup() wird einmal zu Beginn des Programms einmal ausgeführt Auf welche Funktion trifft folgende Beschreibung zu? Wird, je nach framerate() pro Sekunde ausgeführt (default 60 Frames pro Sekunde) - Hauptteil unseres Processing Die ist die draw() Funktion. Wann wird die Funktion keypressed() ausgeführt? Die Funktion wird einmal ausgeführt, wenn eine Taste auf der Tastatur gedrückt wird.

WDH: Arrays Definieren Sie ein Array der länge 5. int[] a = new int [5]; Füllen sie das definierte Array mit einer aufsteigenden Zahlenfolge. for (int i=0;i<a.length; i++){ a[i] = i+10; Ändern Sie den Wert des Arrays an 3. Stelle auf den Wert 99. int[] a = {1,2,3,4,5,6,7; for(int i=0; i<a.length;i++) if(a[i]%2!=0) a[i]=0;

WDH: Arrays Geben Sie das definierte Array a zeilenweise, von der letzten zur ersten Stelle auf der Konsole aus. int[] a = {1,2,3,4,5; for(int i = a.length; i!=0 ;i--){ println(a[i-1]); Überschreiben sie jedes gerade Element im Array a mit dem Wert 0. int[] a = {1,2,3,4,5; for(int i = a.length; i!=0 ;i--){ println(a[i-1]);

WDH: Speicherverwaltung I In welche zwei Datentyp-Arten können Sie unterscheiden? primitive (einfache) Datentypen und komplexe Datentypen Definieren Sie den Begriff Stack. Auf dem Stack werden Parameter und alle lokalen Variablen aller gerade aktiven Methoden verwaltet. (Parameter und Lokale Variablen leben nur für die Dauer der Aktivität der Methode) Definieren Sie den Begriff Heap. Auf dem Heap werden Objekte verwaltet (unter anderem mit new angelegt). Der Inhalt der Referenzvariablen verweisen auf den Speicherort der Objekte im Heap. Ein Array ist ein Objekt.

WDH: Speicherverwaltung II Zeichnen Sie für folgenden Sachverhalt einen Stack und einen Heap. void main (String[] args){ int[] a = {1,2,3,4; int[] b = {10,20,30,40;... 10 20 30 40 b" a" args" Stack& 1 2 3 4... Heap&

WDH: Speicherverwaltung II - Das Selbe / Gleiche https://www.youtube.com/watch?gl=us&v=hepmxbhjk3e

WDH: Speicherverwaltung III Welche Aufgabe hat die Carbage Collection? Der Garbage Collector reinigt den Heap vom Müll Verfolgt systematisch alle Referenzen und markiert diese Nicht markierte Objekte können weggeräumt werden, da keine Referenzvariable auf diese Objekte zeigt Das Wegräumen nicht benötigter Objekte erfolgt automatischin regelmäßigen Abständen

TAG 4.1: SORTIEREN VON ARRAYS Brückenkurs Programmierung SoSe 17 Toni Barthel

Wie bringen wir Ordnung in ein Array? Problemstellung Sie haben ein unsortiertes Array a vorliegen. Wie können Sie dieses am einfachsten sortieren? Es geht nicht um Geschwindigkeit oder Performance einfach nur sortieren. int[] a = {5,1,12,-5,16; int[] a = {-5,1,5,12,16; B U B B L E S O R T

Wie bringen wir Ordnung in ein Array? Der BubbleSort In der Bubble-Phase wird die Eingabe-Liste von links nach rechts durchlaufen. Dabei wird in jedem Schritt das aktuelle Element mit dem rechten Nachbarn verglichen. Falls die beiden Elemente das Sortierkriterium verletzen, werden sie getauscht. Am Ende der Phase steht bei auf- bzw. absteigender Sortierung das größte bzw. kleinste Element der Eingabe am Ende der Liste. void swap(int[] meinarray, int index1, int index2){ int temp = meinarray[index1]; meinarray[index1] = meinarray[index2]; meinarray[index2] = temp; void draw() { int[] unsortiert={5,1,12,-5,16; int[] sortiert=bubblesort(unsortiert); for (int i = 0; i<sortiert.length; i++) System.out.print(sortiert[i] + " "); exit(); int[] bubblesort(int[] meinarray) { for (int i=1; i<meinarray.length; i++) for (int j=0; j<meinarray.length-i; j++) if (meinarray[j]>meinarray[j+1]) swap(meinarray,j,j+1); return meinarray;

TAG 4.2: BASIS OBJEKTORIENTIERTE PROGRAMMIERUNG Brückenkurs Programmierung SoSe 17 Toni Barthel

Zu Erinnerung I - Theorie Klassen und Objekte in Programmen Klassen: definieren die Art der Speicherung und die Operationen (Funktionen und Methoden). Objekte: sind Exemplare (Instanzen) einer Klasse Sie enthalten die jeweils unterschiedlichen Daten. Objekte haben i.a. einen sich ändernden Zustand. Methoden eines Objekts operieren auf den Daten des Objekts. Nur vom Prinzip her. Autos bilden keine Menschen ab!

Zu Erinnerung II - Aufbau im Quellcode class BouncingBall { //Variablen (Eigenschaften) float x = 0; float y = 0; Variablen, Eigenschaften display() //Konstruktor (Baumeister) BouncingBall () { Konstruktor (spezielle Methode!) float x = 0; float y = 0; //Methoden (Fähigkeiten) void display(){ Methoden (allgemeine) ellipse(200,200,20,20); Objekt: b1 mit der Bauplan aus der Klasse BouncingBall

Vergleich Standardlösung und OOP

Zu Erinnerung

Klassenaufbau und Objekterzeugen class BouncingBall { //Deklaration BouncingBall myball; //Variablen (Eigenschaften) float x = 0; float y = 0; //Konstruktor (Baumeister) BouncingBall () { //Methoden (Fähigkeiten) void display(){ ellipse(200,200,20,20); BouncingBall //Initalisierung (Setup) void setup(){ size(600,600); smooth(); //Erzeugen einer neuen Instanz der Klasse //(anlegen eines neuen Objektes) //new ist das Schlüsselwort myball = new BouncingBall(); void draw(){ background(0); myball.display(); //Aufruf der Funktion Main_BouncingBall_Programm

Klassenaufbau und Objekterzeugen class BouncingBall { //Variablen (Eigenschaften) float x = 0; float y = 0; //Deklaration BouncingBall myball; BouncingBall myball2; //Initalisierung (Setup) //Konstruktor (Baumeister) BouncingBall (float einx, float einy) { this.x = einx; this.y = einy; void setup(){ size(600,600); smooth(); myball = new BouncingBall(200,200); myball2 = new BouncingBall(300,400); //Methoden (Fähigkeiten) void display(){ ellipse(this.x,this.y,20,20); BouncingBall void draw(){ background(0); myball.display(); myball2.display(); Main_BouncingBall_Programm

Exkurs: Objekte im Array erzeugen und anzeigen //Deklaration BouncingBall[] myballs; //Initalisierung (Setup) void setup(){ size(600,600); smooth(); myballs = new BouncingBall[10]; for(int i=0; i<myballs.length;i++) myballs[i] = new BouncingBall(10+(i*40),200); void draw(){ background(0); for(int i=0; i<10;i++) myballs[i].display(); Main_BouncingBall_Programm

Bewegung des Balls class BouncingBall {... void move(){ this.x = this.x + this.speedx; this.y = this.y + this.speedy;... void draw(){ background(0); myball.display(); //Aufruf der Funktion myball.move(); myball.bounce(); void bounce(){ if((x > width) (x < 9)) this.speedx = this.speedx * -1; myball.gravity(); Main_BouncingBall_Programm if((y > height) (y < 9)){ this.speedy = this.speedy * -1; void gravity(){ this.speedy = speedy + 0.2;... BouncingBall

Exkurs: Bewegung des Balls //Deklaration BouncingBall[] myballs; //Initalisierung (Setup) void setup(){ size(600,600); smooth(); myballs = new BouncingBall[10]; for(int i=0; i<myballs.length;i++) myballs[i] = new BouncingBall(10+(i*40),200); void draw(){ background(0); for(int i=0; i<10;i++) { myballs[i].display(); myballs[i].move(); myballs[i].bounce(); myballs[i].gravity(); Main_BouncingBall_Programm

Weitere Strukturierung class BouncingBall {... //Methoden (Fähigkeiten) void run () { this.move(); this.bounce(); this.gravity(); this.display(); void move(){ this.x = this.x + this.speedx; this.y = this.y + this.speedy; void bounce(){ if((x > width) (x < 9)) this.speedx = this.speedx * -1; if((y > height) (y < 9)) this.speedy = this.speedy * -1;... //Deklaration BouncingBall myball; //Initalisierung (Setup) void setup(){ size(600,600); smooth(); //Erzeugen einer neuen Instanz der Klasse + //(anlegen eines neuen Objektes) myball = new BouncingBall(200,200); void draw(){ background(0); myball.run();

Weitere Strukturierung //Deklaration BouncingBall[] myballs; //Initalisierung (Setup) void setup(){ size(600,600); smooth(); myballs = new BouncingBall[10]; for(int i=0; i<myballs.length;i++) myballs[i] = new BouncingBall(random(0,600),random(0,300)); void draw(){ background(0); for(int i=0; i<10;i++) { myballs[i].run(); Main_BouncingBall_Programm

Letzte Umbauten //Deklaration BouncingBall[] myballs; //Initalisierung (Setup) void setup(){ size(600,600); background(0); smooth(); myballs = new BouncingBall[10]; for(int i=0; i<myballs.length;i++) myballs[i] = new BouncingBall(random(0,600),random(0,300)); void draw(){ for(int i=0; i<10;i++) { myballs[i].run(); Main_BouncingBall_Programm

TAG 4.3: OOP - GEHEIMNISPRINZIP Brückenkurs Programmierung SoSe 17 Toni Barthel

Prinzipien der OOP Kohäsion Kohäsion und Kopplung Geheimnisprinzip

Kohäsion Kohäsion einer SW-Komponente Beschreibt den innerer Zusammenhalt der Komponente: Eine SW-Komponente (z.b. Klasse) sollte stets ein klardefiniertes und fest umrissenes Konzept realisieren! Die Kohäsion einer Klasse sollte so groß wie möglich sein.

Kohäsion In der objektorientierten Programmierung beschreibt Kohäsion, wie gut eine Programmeinheit eine logische Aufgabe oder Einheit abbildet. In einem System mit starker Kohäsion ist jede Programmeinheit (eine Methode, eine Klasse oder ein Modul) verantwortlich für genau eine wohldefinierte Aufgabe oder Einheit. (Wikipedia)

Geheimnisprinzip: Kohäsion und Kopplung Kopplung von SW-Komponenten Gegenseitige logische oder reale Abhängigkeit von Komponenten: Information die notwendig ist, um die Komponente nutzen zu können. Information (Daten) die von mehreren Komponenten gemeinsam genutzt wird. Die Kopplung von Klassen sollte so klein wie möglich sein.

Geheimnisprinzip: Kohäsion und Kopplung class BouncingBall { //Variablen (Eigenschaften) float x = 0; float y = 0; float speedx = 4; float speedy = 0.5; //Konstruktor (Baumeister) BouncingBall (float eingabex, float eingabey) { this.x = eingabex; this.y = eingabey; void draw(){ for(int i=0; i<10;i++) { myballs[i].run(); myballs[i].speedx = 10; Aufgedecktes Geheimnis Privacy-Leak: Eine Referenz (!) auf Internes wird mit dem Nutzer geteilt, beispielsweise weil es mit einem getter ausgeliefert wird. Objekte können manipuliert werden, ohne die offizielle Schnittstelle zu nutzen! Referenz'auf'ein' gekapseltes'objekt'

Geheimnisprinzip: Kohäsion und Kopplung Öffentliche Objektvariablen erhöhen unnötig die Kopplung Was ist daran so schlimm? Wie macht man es richtig? Hüten&sollst&Du&Dich&vor& öffentlichen& Objektvariablen!& in zwei Schritten So&spare&ich&mir& Methodenaufrufe,&das& Programm&läuC& schneller!&

Verhindern eines Privacy-Lacks class BouncingBall { //Variablen (Eigenschaften) private float x = 0; private float y = 0; private float speedx = 4; private float speedy = 0.5; //Konstruktor (Baumeister) BouncingBall (float eingabex, float eingabey) { this.x = eingabex; this.y = eingabey; Die$dunkle$Seite$der$ Macht;$mit$hoher$ Kopplung$arbeitet$sie;$ins$ Chaos$führt$sie$!$ void draw(){ for(int i=0; i<10;i++) { myballs[i].run(); myballs[i].speedx = 10;

Problemstellung display() bounce() private float x = 0; private float y = 0; private color c = color(120); gravity() In dem ich mir Methoden dafür baue! Wie kann ich speedx von außen verändern? run() setcolor() Objekt: b1 mit der Bauplan aus der Klasse BouncingBall Öffentliche Objektvariablen: ersetze durch Getterund Setter-Methoden

Am Beispiel

Get- und Set-Methode //Variablen (Eigenschaften) private color c = color(120,158,25);... //Methoden (Fähigkeiten) void setcolor (float r, float g, float b) { this.c = color(r,g,b); void draw(){ for(int i=0; i<10;i++) { myballs[i].run(); println(myballs[i].getcolor()); myballs[i].setcolor(random(0,255),random(0,255),random(0,255)); float getcolor() { return this.c;

Zusammenfassung class private getter und setter() Klasse und Methode: class Ball { float x,y; Ball(float x, float y) { this.x = x; this.y = y; void display() { ellipse(x,y,50,50); Objekte und Methodenaufruf: Praxis: Sortieren eines Arrays Aufbau einer Klasse Variablen -> Attribute (Eigenschaften) Methoden -> Konstruktoren (Baumeister) Methoden (Fähigkeiten) Theorie: Kohäsion Kopplung Geheimnisprinzip Ball b = new Ball(100,200); b.display();

Mit freundlichen Dank an HERRN SCHWARZ, M.SC. FÜR DIE INHALTLICHE VORLAGE AUS DEN DEN OOP FOLIEN.

HERZLICHEN DANK FÜR IHRE AUFMERKSAMKEIT Toni Barthel