Fragen zu Annahmen (Assertions)
Fragen zu Annahmen (Assertions) javafrage Mon, 03/20/2017 - 18:22- 2295 views
1 Assertions (Annahmen, Zusicherungen)
1 Assertions (Annahmen, Zusicherungen)Die Klasse Annahme hat zwei Methoden verkettung() und alterInMonaten(). Die geforderten Randbedingungen sind textuell als Javakommentar in den beiden Methoden eingefügt. Fügen Sie bitte im Quellcode für jede Methode die notwendigen Assertions hinter den Kommentaren ein.
public class Annahme {public static void main(String[] args) {
String s;
// Korrekte Aufrufe
s = verkettung("Liese", "Meitner");
int a = alterInMonaten(19, 2);
// Nicht korrekte Aufrufe.
// Sie sollen von Assertions gefangen werden
s = verkettung(null,"Curie");
a = alterInMonaten(250, 13);
}public static String verkettung(String nachname, String vorname) {
// Es darf keine Nullreferenz
// als Vor- oder Nachname benutzt werden
// Assertions hier einfügen:
return (vorname + nachname);
} // Ende der Methode verkettung
public static int alterInMonaten(int alterJahre, int alterMonate) {
// Das Alter einer Person wird in seinem Alter in Jahren und den
// Monaten als Wert zwischen 1 und 12 übergeben.
// Das Alter muss zwischen 0 und 150 Jahren liegen.
// Die laufenden Monate müssen zwischen 1 und 12 liegen.
// Assertions hier einfügen:
return (alterJahre * 12 + alterMonate);
} // Ende der Methode alterInMonaten
} // Ende der Klasse
Die Antwort finden Sie auf der nächsten Seite (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 6 Minuten |
- 4890 views
Falscher Klassenname als in Beschreibung
Der Klassenname müsste doch "Annahme" und nicht "Zusicherung" lauten oder?
- Log in to post comments
2 Anwendung von Assertions
2 Anwendung von AssertionsIn welchen Situationen soll ein Entwickler Assertions anstatt einer regulären Prüfung bei jedem Aufruf in einer Anwendung nutzen?
Die Antwort finden Sie auf der nächsten Seite (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 4 Minuten |
Antwort zur Frage 1: Assertions
public class Annahme {public static void main(String[] args) {
String s;
// Korrekte Aufrufe
s = verkettung("Liese", "Meitner");
int a = alterInMonaten(19, 2);
// Nicht korrekte Aufrufe.
// Sie sollen von Assertions gefangen werden
s = verkettung(null,"Curie");
a = alterInMonaten(250, 13);
}public static String verkettung(String nachname, String vorname) {
// Es darf keine Nullreferenz
// als Vor- oder Nachname benutzt werden
// Assertions hier einfügen:assert ((nachname != null) && (vorname != null));
return (vorname + nachname);
} // Ende der Methode verkettung
public static int alterInMonaten(int alterJahre, int alterMonate) {
// Das Alter einer Person wird in seinem Alter in Jahren und den
// Monaten als Wert zwischen 1 und 12 übergeben.
// Das Alter muss zwischen 0 und 150 Jahren liegen.
// Die laufenden Monate müssen zwischen 1 und 12 liegen.
// Assertions hier einfügen:
assert ((alterJahre >= 0) &&
(alterJahre <= 150) &&
(alterMonate > 0) &&
(alterMonate <= 12));
return (alterJahre * 12 + alterMonate);
} // Ende der Methode alterInMonaten
} // Ende der Klasse
- 4845 views
3 Implementieren von Assertions (Annahmen)
3 Implementieren von Assertions (Annahmen)Fügen Sie hinter den Kommentaren der drei Methoden Assertions (Annahmen) ein, die die Forderung in den Kommentaren erfüllen:
package Kurs2.Assertion;public class Fragen1 {
public static void main (String[] args) {
int konto = 1000;
konto = kontobuchung(konto,-500);
String s = verkettung("Test",null);
int volumen;
volumen = paketvolumen (100, 50, 60);
volumen = paketvolumen (20, 20, -5);
}
public static int kontobuchung (int konto, int betrag) {
// Es darf kein negative Wert für betrag verwendet werden
return (konto - betrag);
}
public static String verkettung (String a, String b) {
// Weder die Übergabevariable a noch b dürfen null Referenzen sein
return (a + b);
}
public static int paketvolumen(int laenge, int breite, int hoehe) {
// Alle Paketmaße müssen positiv sein
// Die Summe von laenge, breite und hoehe darf 2000 nicht uebersteigen
return (laenge*breite*hoehe);
}
}
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 4 Minuten |
Antwort zur Frage 2: Verwendung von Assertions
Assertions haben im Normalfall keinen Performancenachteil. Da das Assertionchecking nur explizit eingeschaltet wird, muss man für die Assertions nicht unbedingt Qualititätssicherung und keine professionelle Behandlung des Sonderfalls durchführen. Daher sind typische Situationen
- Die durchzuführende Prüfung würde sehr (,sehr ) oft durchgeführt und sollte "eigentlich" nie einen Fehlerfall anzeigen
- Die durchzuführende Prüfung sollte nie einen Fehlerfall produzieren, da z.Bsp. aufrufende Methoden den Fehlerfall schon abfangen. Eine doppelte, reguläre Prüfung wäre im Normalbetrieb redundant. Bei einer zukünftigen Wiederverwendung Ihres Softwarepakets könnte es aber zu zu gänzlich anderen Aufrufabfolgen kommen.
- Sie benötigen ledliglich eine Ausgabe zur Fehleranalyse eines Fehlers der nie vorkommen sollte. Sie möchten aber aus Kostengründen keine Ausnahme werfen. Das Werfen einer Ausnahme müsste dokumentiert werden. Es müsste getestet werden. Es müsste eventuell lokalisiert werden.
- 4153 views
4 Assertions Einsatzbereiche
4 Assertions EinsatzbereicheNennen Sie zwei typische Bereiche in den es guter Stil ist, Java-Assertions zu verwenden.
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 2Minuten |
Antwort zu Frage 3: Implementieren von Assertions (Annahmen, Zusagen)
package Kurs2.Assertion;public class Fragen1 {
public static void main (String[] args) {
int konto = 1000;
konto = kontoBuchung(konto,-500);
String s = verkettung("Test",null);
int volumen;
volumen = paketvolumen (100, 50, 60);
volumen = paketvolumen (20, 20, -5);
}
public static int kontoBuchung (int konto, int betrag) {
// Es darf kein negative Wert für betrag verwendet vorkommen
assert (betrag >=0);
return (konto - betrag);
}
public static String verkettung (String a, String b) {
// Weder die Übergabevariable a noch b dürfen null Referenzen sein
assert (a!=null) && (b!=null);
return (a + b);
}
public static int paketvolumen(int laenge, int breite, int hoehe) {
// Alle Paketmaße müssen positiv sein
// Die Summe von laenge, breite und hoehe darf 2000 nicht uebersteigen
assert (laenge>0);
assert (breite>0);
assert (hoehe>0);
assert (laenge+breite+hoehe<=2000);return (laenge*breite*hoehe);
}
}
- 3782 views
Fehlende Klammern
In "public static String verkettung" fehlen Klammern um die Assertion Bedingung.
- Log in to post comments
5 Erweiterte Form von Assertions
5 Erweiterte Form von AssertionsEine einfache Java-Assertion die die geforderte Volljährigkeit testet ist:
assert (alter >=18);
Implementieren Sie diese Assertion in der erweiterten Form. Wählen Sie eine Erweiterung, die eine Konsolenausgabe erzeugt, die den Benutzer über das falsche Alter sinnvoll informiert.
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Antwort zu Frage 4: Assertions Einsatzbereiche
- Invarianten
- Sonderfälle bei Verzeigungen die nie auftreten sollten.
- Fälle die nie Auftreten dürfen
- 3603 views
6 Einschalten von Assertions
6 Einschalten von AssertionsWas muss ein Anwender einer Javaanwendung tun um die Zusatzüberprüfungen von Java-Assertions in einen Programmlauf nutzen zu können?
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Antwort zu Frage 5: Erweiterte Form von Assertions
assert (alter >=18): alter + " ist zu jung“;
- 3659 views
7 Analyse von Assertions
7 Analyse von AssertionsEine Methode die Personen beim Geburtstag ein Jahr älter macht benutzt eine Assertion:
class AssertionTest { public static int einJahrAelter(int alter) { assert (alter >=0): "Negatives Alter"; alter++; return alter; } public static void main(String[] args) { int a = einJahrAelter( -17); System.out.println(a); } }
Das Programm wird mit dem Kommando: java AssertionTest gestartet.
Was wird auf der Konsole ausgegeben?
Was geschieht bei diesem Programmablauf mit der Assertion?
Wie kann man andere Konsolenausgaben für Assertions erzwingen?
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Antwort zu Frage 6: Einschalten von Assertions
Die Option -ea beim Start des Programms nutzen.
- 3519 views
8 Implementieren einer Assertion (Methode transfer())
8 Implementieren einer Assertion (Methode transfer())Die Methode transfer() führt eine Banküberweisung durch. Es wird ein Betrag von einem Konto1 auf ein Konto2 überwiesen. Schreiben Sie eine Assertion und fügen Sie sie am Anfang der Methode ein.
Die Assertion soll
- bei negativen Beträgen aktiv werden
- aktiv werden wenn Konto1 nicht gedeckt ist. Es soll nach der Überweisung keinen negativen Betrag haben
- Nutzen Sie die erweiterte Form der Assertion die einen Text drucken kann.
- Nutzen sie einen vernünftigen Text.
class Ueberweisung { public static int transfer(int betrag,int kontoVon, int kontoNach) { // Hier Assertion einfügen kontoNach += betrag; kontoVon -= betrag; return kontoNach; } public static void main(String[] args) { int k = transfer( 100, 200, 10); System.out.println(k); k = transfer( 100, 80, 10); // Hier soll Assertion feuern System.out.println(k); } }
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Antwort zu Frage 7: Analyse von Assertions
-16
Sie wird nicht ausgeführt da die Option -ea nicht verwendet wird. Durch Benutzen der Option -ea wird die Assertion benutzt und die Konsolenausgabe ändert sich
- 3018 views
9 Implementieren einer Assertion
9 Implementieren einer AssertionDie Methode drucke(Adresse a) druckt eine Adresse. Schreiben Sie eine Assertion die sicherstellt, dass die Adresse gedruckt werden kann. Sie soll vermeiden, dass die übergebene Addresse-referenz a leer ist.
- Nutzen Sie die erweiterte Form der Assertion die einen Text druckt
- Nutzen sie einen vernünftigen Ausgabetext.
class Demo { public static void drucke(Addresse a) { // Hier Code eintragen System.out.println(a.nachname); System.out.println(a.vorname); } }
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 3 |
Schwierigkeitsgrad | mittel |
Zeit | 3 Minuten |
Antwort zu Frage 8: Implementieren einer Assertion (Methode transfer())
class Ueberweisung { public static int transfer(int betrag,int kontoVon, int kontoNach) { assert ((betrag > 0) && (kontoVon-betrag>= 0)) : "Ueberweisungslimitfehler"; kontoNach += betrag; kontoVon -= betrag; return kontoNach; } public static void main(String[] args) { int k = transfer( 100, 200, 10); System.out.println(k); k = transfer( 100, 80, 10); // Hier soll Assertion feuern System.out.println(k); } }
- 2561 views
10 Assertion versus if-Abfrage
10 Assertion versus if-AbfrageWas ist der Vorteil der Assertion gegenüber einer if-Abfrage die nur drucken würde wenn eine Referenz übergeben wurde? Geben Sie eine kurze Erklärung. Was ist der Vorteil der Assertion gegenüber einer if-Abfrage die nur drucken würde wenn eine Referenz übergeben wurde? Geben Sie eine kurze Erklärung.
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 3+2 |
Schwierigkeitsgrad | mittel |
Zeit | 2 Minuten |
Antwort zu Frage 9: Implementieren einer Assertion
class Demo { public static void drucke(Addresse a) { // Hier Code eintragen assert (a!=null) : ''keine Adresse angegeben''; System.out.println(a.nachname); System.out.println(a.vorname); } }
Stopp! Nicht weiterlesen. Die Antwort zur aktuellen Frage kommt weiter unten!
Antwort zu Frage 10: Assertion versus if-Abfrage
Die Assertion wird im normalen Programmablauf nicht ausgeführt und verbraucht daher keine unnötigen Ressourcen.
- 2920 views