0% fanden dieses Dokument nützlich (0 Abstimmungen)
10 Ansichten19 Seiten

Woche 03: UML, Testing, Call-by-Value, Kontrollstrukturen

Das Dokument behandelt UML-Diagramme, JUnit-Testing und Kontrollstrukturen in Java. Es erklärt die Struktur von UML-Klassen, die Verwendung von JUnit 5 für Tests, einschließlich Assertions und Imports, sowie verschiedene Kontrollstrukturen wie if-Anweisungen und Schleifen. Zudem wird das Konzept von Call-by-Value in Java erläutert, um den Unterschied zwischen primitiven Datentypen und Objekten zu verdeutlichen.

Hochgeladen von

chiangmit8
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
10 Ansichten19 Seiten

Woche 03: UML, Testing, Call-by-Value, Kontrollstrukturen

Das Dokument behandelt UML-Diagramme, JUnit-Testing und Kontrollstrukturen in Java. Es erklärt die Struktur von UML-Klassen, die Verwendung von JUnit 5 für Tests, einschließlich Assertions und Imports, sowie verschiedene Kontrollstrukturen wie if-Anweisungen und Schleifen. Zudem wird das Konzept von Call-by-Value in Java erläutert, um den Unterschied zwischen primitiven Datentypen und Objekten zu verdeutlichen.

Hochgeladen von

chiangmit8
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen

Woche 03

UML, Testing, Call-by-Value, Kontrollstrukturen


UML
Die Klasse wird in drei Teilen aufgeteilt: oben der
Klassenname, in der Mitte die Attributen, und unten die
Methoden.
Konstruktoren, Getter und Methoden wie toString() sind
oft nicht im Diagramm enthalten.
Sichtbarkeiten werden durch Symbole dargestellt:
“+” für public: Zugriff für alle Klassen möglich
“-” für private: Nur die eigene Klasse hat Zugriff
static zeigt an, dass es sich um Klassenattribute oder -
methoden handelt.
UML zu Code
Wie sieht der zugehörige Java-Code aus, wenn wir ein UML-Diagramm betrachten? Ein Beispiel:
1 public class Example {
2 private int age;
3 private String name;
4
5 private static int magicNumber;
6
7 public void run() {}
8
9 public double doStuff(Stuff stuff) {
10 return 0.0;
11 }
12
13 public static void main(String[] args) {}
14 }
W03P01 & W03P02
Roboter
JUnit Testing
Setup mit Gradle
Wir verwenden JUnit 5. In [Link] steht entsprechend:
1 ...
2 dependencies {
3 implementation '[Link]:junit jupiter:5.8.1'
4 }
5 ...

Achte darauf, dass du die richtige Version verwendest! JUnit 5 und nicht JUnit 4!
Sobald du @Test über eine Methode tippst, sollte dir deine IDE allerdings beim darüberhovern bereits
vorschlagen, JUnit in die Dependencies mit aufzunehmen, dann musst du dies nicht per Hand eintippen.
JUnit 5 Testing
Assertions
Um das Verhalten von Funktionen zu testen, vergleichen wir häufig den erwarteten Output mit dem
tatsächlichen Ergebnis für einen bestimmten Input. Hierfür nutzen wir Assertions.
1 assertEquals(9 , square(3));
2 assertEquals("Hello World", concatenate("Hello", " ", "World");

JUnit bietet noch viele weitere Assertions an, wie…


assertArrayEquals() für Arrays
assertEquals(expected, actual, delta) für float s, bei der auf Gleichheit minus ein delta getestet wird
assertNotNull()
und viele mehr…

Wie immer bei Fragen empfehlen wir, die Dokumentation hier zu überfliegen.
JUnit 5
Imports
Um in einer Klasse die Funktionalitäten von JUnit 5 nutzen zu können, müsste ihr sie importieren. Die
Imports der Annotationen und Assertions sehen dann etwa so aus:
import [Link];
import [Link];
import [Link];

import static [Link];


import static [Link];
import static [Link];

Achtet darauf, dass die Annotationen und Assertions von der Jupiter API importiert werden, also im
import-Statement der String “jupiter” enthalten ist.
(Die Imports kommen ganz nach oben in jede Klasse, die die jeweiligen Funktionalitäten verwendet,
direkt unter das package-Statement, falls vorhanden.)
W03P03
Testing in der Pinguinkneipe
Kontrollstrukturen
Selektion (bedingte Auswahl) Iteration (wiederholte Ausführung)
if-Anweisung while-Schleife
if-else-Anweisung do-while-Schleife
else if for-Schleife
switch
if-Anweisung
Allgemeine Form:
1 if(Bedingung A) {
2 // Code, der läuft, wenn A true ergibt
3 }

Beispiel:
1 public static void printIfZero(int number){
2 if(number == 0) {
3 [Link]("Zero!");
4 }
5 }
if-else Anweisung
Allgemeine Form:
1 if(Bedingung A) {
2 // Code, der läuft, wenn A true ergibt
3 } else {
4 // Code, der läuft, wenn A false ergibt
5 }

Beispiel:
1 public static void printIfZero(int number){
2 if(number == 0) {
3 [Link]("Zero!");
4 } else {
5 [Link]("Not zero!");
6 }
7 }
else if
1 if(number == 0) {
2 [Link]("Zero!");
3 } else {
4 if(number < 0) {
5 [Link]("Negative!");
6 } else {
7 [Link]("Positive");
8 }
9 }

kann kompakter dargestellt werden als:


1 if(num == 0) {
2 [Link]("Zero!");
3 } else if(num < 0) {
4 [Link]("Negative!");
5 } else {
6 [Link]("Positive!");
7 }
while-Schleife
Allgemeine Form:
1 while(Bedingung A){
2 // Code, der wiederholt läuft, solange A true ergibt
3 }

Beispiel:
1 public static void countDown(int start){ Output countDown(3):
2 while(start > 0){
3 [Link](start); 1 3
4 start--; 2 2
5 } 3 1
6 [Link]("GO!"); 4 GO!
7 }
do-while-Schleife
Allgemeine Form:
1 do {
2 // Code, der wiederholt läuft, solange A true ergibt
3 }while(Bedingung A);

Beispiel:
1 public static void passwordCheck(){
2 String password;
3 do {
4 password = getInput();
5 } while (!isPasswordCorrect(password));
6 }

Hier wird der Code in den geschweiften Klammern garantiert einmal ausgeführt.
for-Schleife
Allgemeine Form:
A: (Deklaration und) Initialisierung einer C: Veränderung (z.B. Hochzählen)
(oder mehrerer) Zählervariablen der Zählervariablen
1 for(Anweisung A ; Bedingung B ; Anweisung C){
2 // Code, der wiederholt läuft, solange B true ergibt
3 }

Beispiel:
1 public static void countDown(int start){ Output countDown(3):
2 for(int i=start; i>0; i--){
3 [Link](i); 1 3
4 } 2 2
5 [Link]("GO!"); 3 1
6 } 4 GO!
Bonus: Call-by-Value
1 public static void main(String[] args) {
2 int myNumber = 2;
3 addOne(myNumber);
4 [Link](myNumber);
5 }
6 public static void addOne(int number) {
7 number = number + 1;
8 }

Output: 2
Call-by-Value
Anders bei Klassenattributen
1 public class MyNumber {
2 public int value = 2;
3 // default constructor
4 public static void inc(MyNumber n) {
5 [Link] += 1;
6 }
7 }
8
9 public static void main(String[] args) {
10 MyNumber myN = new MyNumber();
11 inc(myN);
12 [Link]([Link]);
13 }

Output: 3
W03P04
W03P05

Das könnte Ihnen auch gefallen