Tag 4, Aufgabe 1 (static / nicht static)

kaktuskuchen
Mausschubser
Mausschubser
Beiträge: 50
Registriert: 1. Okt 2007 22:34

Tag 4, Aufgabe 1 (static / nicht static)

Beitrag von kaktuskuchen » 6. Okt 2007 18:42

Hi!

In den Lösungen zur Aufgabe 1 wird vorgeschlagen, eine cos(x)-Funktion als dynamisch zu implementieren. Warum? Die sin(x)-Funktion wird in der gleichen Aufgabe als statisch vorgeschlagen.

Daraus schließe ich, dass die cos(x)-Funktion irgendwie auf die sin(x)-Funktion zugreifen soll/kann/muss. Ansonsten kann ich mir nicht erklären, warum der cos dynamisch implementiert wird und der sin nicht.

Hm, gerade mal Wikipedia durchgelesen... das würde dann doch auf eine Implementierung in dieser Richtung hindeuten:

Code: Alles auswählen

public double cos(double inputVal) {
  return Math.sin(90-inputVal);
}
Dann würde das (für mich zumindest *g*) Sinn machen, da eine statische Methode nicht auf eine dynamische zugreifen kann - haben wir ja so gelernt.

Könnte man dann nicht auch das ganze umdrehen und cos statisch machen und dafür sin dynamisch? Dafür dann den sin so definieren wie ich oben den cos implementiert hab? Warum berechnet man nicht einfach cos und sin, ohne diese Abhängigkeiten zu erzeugen? Dann wären beide Methoden statisch und ich wär glücklich...

Oder sollte ich einfach weniger denken? :(

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex » 7. Okt 2007 00:56

Hmmm..vielleicht ein Tippfehler von den Tutoren. Also aus dem stehgreif heraus gibt das im Moment keinen Sinn, die cos-Funktion dynamsich zu halten, selbst wenn diese auf die sin-Funktion zurückgreift :| . Meiner Meinung nach müsste es auch so funktionieren, sofern die sin-funktion in der gleichen Klasse steht:

Code: Alles auswählen

public static double cos(double inputVal) {
  return sin(90-inputVal);
} 

yourmaninamsterdam
Nerd
Nerd
Beiträge: 681
Registriert: 26. Okt 2006 14:04
Kontaktdaten:

Beitrag von yourmaninamsterdam » 7. Okt 2007 12:39

Ich kenne zwar die Aufgabe nicht, aber ich unterstelle mal konstruktiver Weise, dass du dir nicht ganz darüber im Klaren bist, was "static" bedeutet.

Sobald du eine Methode oder ein Feld als static deklarierst, gibt es diese bildhaft gesprochen für die Klasse nur einmal, nicht einmal pro Instanz. Hast du also Cosinus als static deklariert und Sinus nicht, bedeutet das, dass die Methoden so aufgerugen werden können (wenn wir davon ausgehen, dass sie sich beide in einer Klasse "Math" befinden):

Code: Alles auswählen

int x = 60;

// Aufruf von public static double cos(int x)
Math.cos(x);

// Aufruf von public double sin(int x)
Math m = new Math();
m.sin(x);
Warum man das uneinheitlich machen sollte? Es handelt sich um eine Übung.
Grundsätzlich berechnen sich Sinus und Cosinus immer gleich, unabhängig davon, wie das Objekt sonst so beschaffen ist. Deswegen ist static hier durchaus sinnvoll. Und tatsächlich findet man in Java auch eine Klasse Math, die diverse mathematische Methoden als statische Methoden zur Verfügung stellt (Math wird nie instanziiert).

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex » 7. Okt 2007 14:13

Die Aufgabe lautete so:
Aufgabe: Static/nicht Static (Stufe 1)
Was ist der Unterschied zwischen static und nicht static?
Würdest Du für folgende Fälle eher statische oder dynamische Funktionen vorschlagen?
a) sin(x)
b) eine Funktion welches das gekoppelte Objekt auf den status "aktiv%u201C setzt.
c) cos(x)
d) Eine Funktion welche zwei 3er Vektoren nimmt und das Ergebnis im gekoppelten Objektabspeichert.
Was der untertschied zwischen static und nicht static ist und wozu man das anwendet ist mir schon klar, aber trotzdem verstehe ich den Sinn nicht an der Aufgabe sin(x) als static und cos(x) als dynamisch zu implementieren.

Hier nochmal die Lösungsvorschläge:
1 Aufgabe: Static/nicht Static (Stufe 1)
Was ist der Unterschied zwischen static und nicht static?
Lösung:
statische Mehtoden und Variablen werden auf Klassenebene benutzt, nicht statische Methoden und
Variablen werden auf Objektebene benutzt.
Würdest Du für folgende Fälle eher statische oder dynamische Funktionen vorschlagen?
a) sin(x) (statisch)
b) eine Funktion welches das gekoppelte Objekt auf den status %u201Daktiv%u201C setzt. (nicht statisch)
c) cos(x) (nicht statisch)
d) Eine Funktion welche zwei 3er Vektoren nimmt und das Ergebnis im gekoppelten Objekt
abspeichert. (nicht statisch)

Benutzeravatar
Wolle
Ehemalige Fachschaftler
Beiträge: 127
Registriert: 8. Jan 2005 13:23
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Wolle » 7. Okt 2007 17:50

^^
okok, wir geben es zu
ist ein fehler!
ihr dürft uns dann alle einmal schlagen!

aber schön, dass ihr "muster"-"lösungen" nicht so ohne weiteres akzeptiert! ;)
hab die download-lösung korrigiert!
Always remember that you are unique. Just like everyone else.

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex » 7. Okt 2007 20:04

^^ Hihi..und ich dachte schon ich hätte irgendwas verpasst und müsste meine Ansichten zu diesem Thema überdenken. :wink:

yourmaninamsterdam
Nerd
Nerd
Beiträge: 681
Registriert: 26. Okt 2006 14:04
Kontaktdaten:

Beitrag von yourmaninamsterdam » 8. Okt 2007 01:24

Ich bin überzeugt, der Fehler wurde in die Musterlösung eingebaut, um zu demonstrieren, wie Musterlösungen im weiterem Verlauf eures Studiums aussehen werden... ;-)

kaktuskuchen
Mausschubser
Mausschubser
Beiträge: 50
Registriert: 1. Okt 2007 22:34

Beitrag von kaktuskuchen » 8. Okt 2007 19:38

hehe, diese "angewohnheit" hatte mein info-lehrer...
Wolle hat geschrieben:ihr dürft uns dann alle einmal schlagen!
Nein! Die Menge an Arbeit tritt man nicht mit Füßen. Und man schlägt auch nicht drauf ein... (schon gut, schon gut, habs kapiert ;) )

Antworten

Zurück zu „Archiv“