Quelltextanalyse Java: Unterschied zwischen den Versionen

Aus SibiWiki
Zur Navigation springen Zur Suche springen
 
(12 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Informatik]]
[[Kategorie:Informatik]]
[[Kategorie:Informatik-Abitur]]
[[Kategorie:Informatik-Abitur]]


'''Ziel''' der Quelltextanalyse ist es, die Funktionsweise einer Methode mithilfe geeigneter <u>Fachbegriffe</u> möglichst <u>kurz</u> und <u>präzise</u> zu beschreiben. Dabei sind <u>Standardformulierungen</u> hilfreich.
'''Ziel''' der Quelltextanalyse ist es, die Funktionsweise einer Methode mithilfe geeigneter <u>Fachbegriffe</u> möglichst <u>kurz</u> und <u>präzise</u> zu beschreiben. Dabei sind <u>Standardformulierungen</u> hilfreich.
Zeile 9: Zeile 8:
** Beispiele für Standardformulierungen finden sich unten.
** Beispiele für Standardformulierungen finden sich unten.
* Auf Ästhetik muss '''nicht''' geachtet werden, so sind z.B. Wiederholungen am Satzanfang kein Problem.
* Auf Ästhetik muss '''nicht''' geachtet werden, so sind z.B. Wiederholungen am Satzanfang kein Problem.
=Der Operator ''"Analysieren Sie..."'' im Zentralabitur=
Der Operator ''"Analysieren Sie..."'' kommt im Zentralabitur immer '''nur in Kombination mit einem weiteren Operator''' vor.<br/>Der weitere Operator sagt aus, was zu schreiben ist.
Konkret heißt das:
* '''''"Analysieren Sie..."'' heißt so viel wie ''"Denken Sie nach über..."'''''
* Konsequenz:<br/><font color='red'>Für den Operator ''"Analysieren Sie..."'' muss man <u>gar nichts aufschreiben!!</u></font>
Man muss das nicht verstehen. <br/>Aber wer das nicht berücksichtigt, verliert im Abitur sehr viel Zeit.
Hinweis:<br/>
Diese Auffassung von ''"Analysieren Sie..."'' ist sehr spezifisch für das Informatik-Zentralabitur!<br/>Bitte auf keinen Fall auf andere Fächer übertragen!!
'''Beispiel:'''
<u>Aufgabenstellung:</u><br/>
''Analysieren und erläutern Sie den Algorithmus im Sachkontext.''
<u>Was ist zu tun?</u>
* ''Analysieren ...'': Einfach nur nachdenken - nichts schreiben!
* ''... und erläutern Sie den Algorithmus im Sachkontext'': Das ist das, was zu tun ist! <br/>Weil bei dieser Aufgabe "nur" im Sachkontext erläutert werden soll, braucht man überhaupt nicht auf Programmierungs-Details eingehen, wenn sie für den Sachkontext keine Rolle spielen.


=Standardformulierungen=
=Standardformulierungen=
Zeile 15: Zeile 36:
'''Beispiel:'''
'''Beispiel:'''


Gegeben ist die Methode <code>tueWas</code>:
Gegeben ist die Methode <code>tueWas</code>. <br/><code>pQueue</code> enthält lauter Kunden, die nach Einkommen absteigend sortiert sind, d.h. der Kunde mit dem höchsten Einkommen ist vorne.


<code>
<code>
  01  private void tueWas(Queue<Kunde> pQueue, Kunde pKunde) {
  01  private void tueWas(Queue<Kunde> pQueue, Kunde pKunde) {
       Queue<Kunde> hilfs = new Queue<Kunde>();
       Queue<Kunde> hilfs = new Queue<Kunde>();
       boolean zzz = false;
       boolean zzz = false;
       while (!pQueue.isEmpty()) {
       while (!pQueue.isEmpty()) {
  05      Kunde erster = pQueue.front();
  05      Kunde k = pQueue.front();
         if (zzz == false && pKunde.getGuthaben() > erster.getGuthaben()) {
         if (zzz == false && pKunde.getGuthaben() > k.getGuthaben()) {
           hilfs.enqueue(pKunde);
           hilfs.enqueue(pKunde);
           zzz = true;
           zzz = true;
         }
         }
  10      hilfs.enqueue(erster);
  10      hilfs.enqueue(k);
         pQueue.dequeue();
         pQueue.dequeue();
       }
       }
Zeile 38: Zeile 59:
       }
       }
  20 }
  20 }
</code>
</code>


'''Aufgabe:'''
'''Aufgabe:'''


Unterteile die Methode in geeignete Abschnitte und erläutere, was in den einzelnen Abschnitten passiert. Verwende dabei geeignete Fachbegriffe.
* Unterteile die Methode in geeignete Abschnitte und erläutere die Funktionsweise der Abschnitte. Verwende dabei geeignete Fachbegriffe.
Erläutere, welchen Zweck die lokale Variable <code>zzz</code> erfüllt und gib ihr einen geeigneten Namen.
* Erläutere, welchen Zweck die lokale Variable <code>zzz</code> erfüllt und gib ihr einen geeigneten Namen.
* Benenne den Zweck, den die Methode erfüllt.


 
==Mögliche Lösung==
'''Mögliche Lösung:'''


'''Fachbegriffe''' sind '''fett'''; die Lösung enthält möglichst viele Standardformulierungen.
'''Fachbegriffe''' sind '''fett'''; die Lösung enthält möglichst viele Standardformulierungen.


* Z. 01: '''Methodenkopf''': Die Methode <code>tueWas</code> erwartet die '''Parameter''' <code>pQueue</code> (vom Typ <code>Queue</code>) und <code>pKunde</code> vom '''Typ''' <code>Kunde</code>. Die Methode gibt nichts zurück.
* Die Methode <code>tueWas</code> erwartet die '''Parameter''' <code>pQueue</code> (vom Typ <code>Queue</code>) und <code>pKunde</code> vom '''Typ''' <code>Kunde</code>. Die Methode gibt nichts zurück.
* Z. 02-03: Die '''lokalen Variablen''' <code>hilfs</code> (vom Typ ''<code>Queue</code> von <code>Kunde</code>-Objekten'') und <code>zzz</code> (vom Typ <code>boolean</code>) werden '''deklariert'''; <code>pQueue</code> wird als leere Queue '''initialisiert''' und <code>zzz</code> mit dem Wert <code>false</code>.
* Zu Beginn (Z. 2-3) werden die '''lokalen Variablen''' <code>hilfs</code> und <code>zzz</code> '''deklariert'''; <code>hilfs</code> wird als leere Queue '''initialisiert''' und <code>zzz</code> mit dem Wert <code>false</code>.
* Z. 04-12: Eine <code>while</code>-'''Schleife''' wird geöffnet, die so lange läuft, wie <code>pQueue</code> noch Elemente enthält. Innerhalb der Schleife passiert folgendes:
* In der <code>while</code>-'''Schleife''' (Z.4-12) wird <code>pQueue</code> '''nach und nach geleert''' und hinten an <code>hilfs</code> '''angehängt''' (Z. 4+5+10+11).
** Z. 05: Das vorderste Element von <code>pQueue</code> wird in der '''lokalen Variable''' <code>erster</code> (vom Typ <code>Kunde</code>) gespeichert.
** Dabei wird in der '''lokalen Variable''' <code>k</code> der jeweils '''vorderste''' Kunde aus <code>pQueue</code> gespeichert.  
** Z. 06-09: Wenn <code>zzz</code> den Wert <code>false</code> hat und das Guthaben von <code>pKunde</code> größer ist als das Guthaben von <code>erster</code>, dann passiert folgendes:
** '''Wenn''' <code>zzz</code> noch <code>false</code> ist '''und''' <code>pKunde</code> ein größeres Einkommen hat als der vorderste Kunde <code>k</code>,<br/>dann wird  <code>pKunde</code> an <code>hilfs</code> '''hinten angehängt''' und <code>zzz</code> auf <code>true</code> gesetzt.
*** <code>pKunde</code> wird hinten an <code>hilfs</code> '''angehängt'''.
* Z. 13-15: Wenn <code>zzz</code> den Wert <code>false</code> hat, dann wird <code>pKunde</code> jetzt an <code>hilfs</code> '''hinten angehängt''';<br/>das geschieht, wenn <code>pKunde</code> in der <code>while</code>-Schleife noch nicht an <code>hilfs</code> angehängt wurde.
*** <code>zzz</code> wird auf <code>true</code> gesetzt.
** Z. 10-11: <code>erster</code> wird von <code>pQueue</code> gelöscht und hinten an <code>hilfs</code> '''angehängt'''.
* Z. 13-15: Wenn <code>zzz</code> den Wert <code>false</code> hat, dann wird <code>pKunde</code> an <code>hilfs</code> angehängt.
** Das geschieht, wenn <code>pKunde</code> in der <code>while</code>-Schleife noch nicht an <code>hilfs</code> angehängt wurde; so wird gewährleistet, dass <code>pKunde</code> auf jeden Fall an <code>hilfs</code> angehängt wird, auch wenn niemand ärmer ist als <code>pKunde</code>.
* Z. 16-19: Alle Elemente von <code>hilfs</code> werden wieder auf <code>pQueue</code> zurückübertragen.
* Z. 16-19: Alle Elemente von <code>hilfs</code> werden wieder auf <code>pQueue</code> zurückübertragen.


Zeile 65: Zeile 82:


<code>zzz</code> heißt deswegen am besten <code>schonEingefuegt</code>.
<code>zzz</code> heißt deswegen am besten <code>schonEingefuegt</code>.
Die Methode fügt <code>pKunde</code> gemäß seinem Einkommen an der richtigen Stelle in <code>pQueue</code> ein.<br/>
Wenn <code>pKunde</code> ärmer ist als alle in <code>pQueue</code>, dann wird er hinten angehängt.

Aktuelle Version vom 20. Mai 2023, 07:20 Uhr


Ziel der Quelltextanalyse ist es, die Funktionsweise einer Methode mithilfe geeigneter Fachbegriffe möglichst kurz und präzise zu beschreiben. Dabei sind Standardformulierungen hilfreich.

  • Fachbegriffe dienen der Präzision.
  • kurz ist deswegen wichtig, weil man bei der Klausur möglichst wenig Zeit auf das Schreiben verwenden sollte.
  • Auf Standardformulierungen sollte man zurückgreifen können - denn die Beschreibung für das Durchlaufen eines Queues oder einer Liste muss man nicht für jede Klausur neu erfinden.
    • Beispiele für Standardformulierungen finden sich unten.
  • Auf Ästhetik muss nicht geachtet werden, so sind z.B. Wiederholungen am Satzanfang kein Problem.

Der Operator "Analysieren Sie..." im Zentralabitur

Der Operator "Analysieren Sie..." kommt im Zentralabitur immer nur in Kombination mit einem weiteren Operator vor.
Der weitere Operator sagt aus, was zu schreiben ist.

Konkret heißt das:

  • "Analysieren Sie..." heißt so viel wie "Denken Sie nach über..."
  • Konsequenz:
    Für den Operator "Analysieren Sie..." muss man gar nichts aufschreiben!!

Man muss das nicht verstehen.
Aber wer das nicht berücksichtigt, verliert im Abitur sehr viel Zeit.

Hinweis:
Diese Auffassung von "Analysieren Sie..." ist sehr spezifisch für das Informatik-Zentralabitur!
Bitte auf keinen Fall auf andere Fächer übertragen!!


Beispiel:

Aufgabenstellung:
Analysieren und erläutern Sie den Algorithmus im Sachkontext.

Was ist zu tun?

  • Analysieren ...: Einfach nur nachdenken - nichts schreiben!
  • ... und erläutern Sie den Algorithmus im Sachkontext: Das ist das, was zu tun ist!
    Weil bei dieser Aufgabe "nur" im Sachkontext erläutert werden soll, braucht man überhaupt nicht auf Programmierungs-Details eingehen, wenn sie für den Sachkontext keine Rolle spielen.

Standardformulierungen

Mögliche Standardformulierungen werden hier an einem Beispiel aufgezeigt.

Beispiel:

Gegeben ist die Methode tueWas.
pQueue enthält lauter Kunden, die nach Einkommen absteigend sortiert sind, d.h. der Kunde mit dem höchsten Einkommen ist vorne.


01  private void tueWas(Queue<Kunde> pQueue, Kunde pKunde) {
      Queue<Kunde> hilfs = new Queue<Kunde>();
      boolean zzz = false;
      while (!pQueue.isEmpty()) {
05      Kunde k = pQueue.front();
        if (zzz == false && pKunde.getGuthaben() > k.getGuthaben()) {
          hilfs.enqueue(pKunde);
          zzz = true;
        }
10      hilfs.enqueue(k);
        pQueue.dequeue();
     }
     if(!zzz){
       hilfs.enqueue(pKunde);
15   }
     while (!hilfs.isEmpty()) {
       pQueue.enqueue(hilfs.front());
       hilfs.dequeue();
     }
20 }

Aufgabe:

  • Unterteile die Methode in geeignete Abschnitte und erläutere die Funktionsweise der Abschnitte. Verwende dabei geeignete Fachbegriffe.
  • Erläutere, welchen Zweck die lokale Variable zzz erfüllt und gib ihr einen geeigneten Namen.
  • Benenne den Zweck, den die Methode erfüllt.

Mögliche Lösung

Fachbegriffe sind fett; die Lösung enthält möglichst viele Standardformulierungen.

  • Die Methode tueWas erwartet die Parameter pQueue (vom Typ Queue) und pKunde vom Typ Kunde. Die Methode gibt nichts zurück.
  • Zu Beginn (Z. 2-3) werden die lokalen Variablen hilfs und zzz deklariert; hilfs wird als leere Queue initialisiert und zzz mit dem Wert false.
  • In der while-Schleife (Z.4-12) wird pQueue nach und nach geleert und hinten an hilfs angehängt (Z. 4+5+10+11).
    • Dabei wird in der lokalen Variable k der jeweils vorderste Kunde aus pQueue gespeichert.
    • Wenn zzz noch false ist und pKunde ein größeres Einkommen hat als der vorderste Kunde k,
      dann wird pKunde an hilfs hinten angehängt und zzz auf true gesetzt.
  • Z. 13-15: Wenn zzz den Wert false hat, dann wird pKunde jetzt an hilfs hinten angehängt;
    das geschieht, wenn pKunde in der while-Schleife noch nicht an hilfs angehängt wurde.
  • Z. 16-19: Alle Elemente von hilfs werden wieder auf pQueue zurückübertragen.

In der Variablen zzz wird festgehalten, ob pKunde schon in hilfs eingefügt wurde.

zzz heißt deswegen am besten schonEingefuegt.

Die Methode fügt pKunde gemäß seinem Einkommen an der richtigen Stelle in pQueue ein.
Wenn pKunde ärmer ist als alle in pQueue, dann wird er hinten angehängt.