Fragen zu Annahmen (Assertions)

Fragen zu Annahmen (Assertions) javafrage Mon, 03/20/2017 - 18:22

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
javafrage Mon, 02/20/2012 - 08:47

2 Anwendung von Assertions

2 Anwendung von Assertions

In 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

javafrage Fri, 02/24/2012 - 18:07

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.
javafrage Thu, 01/10/2013 - 08:24

4 Assertions Einsatzbereiche

4 Assertions Einsatzbereiche

Nennen 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);
}
}

javafrage Sun, 03/16/2014 - 18:00

Anonymous (not verified)

Tue, 06/27/2017 - 15:13

In "public static String verkettung" fehlen Klammern um die Assertion Bedingung.

5 Erweiterte Form von Assertions

5 Erweiterte Form von Assertions

Eine 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

  1. Invarianten
  2. Sonderfälle bei Verzeigungen die nie auftreten sollten.
  3. Fälle die nie Auftreten dürfen
javafrage Sun, 03/16/2014 - 18:08

6 Einschalten von Assertions

6 Einschalten von Assertions

Was 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“;

 

javafrage Sun, 03/16/2014 - 18:21

7 Analyse von Assertions

7 Analyse von Assertions

Eine 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.

javafrage Thu, 01/15/2015 - 18:40

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

 

javafrage Thu, 01/15/2015 - 18:47

9 Implementieren einer Assertion

9 Implementieren einer Assertion

Die 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);
   }
} 
javafrage Sun, 03/12/2017 - 16:26

10 Assertion versus if-Abfrage

10 Assertion versus if-Abfrage

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. 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.

javafrage Sun, 03/12/2017 - 16:39