Erste Schritte Konzepte OOP

ciber

Mitglied
Hey Leute,

ich beschäftige mich seit wenigen Tagen mit einer OOP-Sprache (Java) und hänge an einem Problem.
Mir wollen die Konzepte der OOP nicht in den Kopf.

Folgendes "Problem".

Wenn ich eine Berechnung auslagern möchte, dann kann ich eine Methode überhalb des main-Einsprungspunktes deklarieren.

z.B so ...
Java:
public class zinsen {
  

  public static int berechnung(int kapital, int testwert) {
  int zwischenergebnis;
  zwischenergebnis = kapital * testwert;
  
  return zwischenergebnis;
  }

  
public static void main(String[] args) {
int Endbetrag;
Endbetrag = berechnung(100, 5);
  
System.out.println(Endbetrag);
  
}
}

Jetzt habe ich eine Aufgabe bearbeitet, bei der ich eine Klasse erzeuge und danach eine Instanz erzeuge und dem Konstruktor Werte übergebe. Diese steuer ich dann mit "name.<methode>" an.

Wie muss aber der Quelltext aussehen, wenn ich in meinem main() Block auf eine Klasse zugreifen will um eine Berechnung innerhalb dieser Klasse auszuführen und mir das Ergebnis zurückgeben möchte OHNE eine Instanz zu erstellen?

Also das in meinem Beispiel "Endbetrag = berechnung(100, 5)" anstatt auf die Methode oberhalb von main auf irgendeine Klasse zugreifen kann.

:(
 
G

Gast2

Gast
Java:
IrgendeineKlasse.berechnung(...);
Wenn du aber OOP Konzepte verstehen/nutzen willst solltest du nicht mit static arbeiten.
 

njans

Top Contributor
Static Methoden sind meistens eher Helper Klassen zugeschrieben. Teilweise aus Instantiierung.

Klassen haben immer einen Sinn bei OOP. Ich bin mir nicht sicher, was genau dir bei OOP nicht ganz klar wird, wäre vielleicht ganz gut, wenn du da klarstellen könntest, was dir eben nicht klar ist und was du verstehst.
 

ciber

Mitglied
Hey,

Java:
class berechnung {

static int rechnen(int kapital, int testwert) {
int zwischenergebnis;
zwischenergebnis = kapital * testwert;
return zwischenergebnis;
  }
}

public class zinsen {
public static void main(String[] args) {
int Endbetrag;
Endbetrag = berechnung.rechnen(100, 5);
  
System.out.println(Endbetrag);
  
  }
}

Folgende Fragen hätte ich:

1. Wenn ich das Wort "static" in der Klasse Berechnung nicht angebe, bekomme ich einen Fehler. Warum?

2. Ich habe in dem Beispiel keinen Konstruktor angegeben. Was passiert im Hintergrund, wenn ich keinen angebe?

3. Sollte man Berechnungen eher innerhalb der main-Klasse in Methoden packen oder als separate Klassen auslagern?
---
 

JavaMeetsBlueJ

Bekanntes Mitglied
Wenn du eine Methode einer Klasse nutzen möchtest, ohne aus der Klasse eine Instanz(ein Objekt) zu erzeugen, müssen die Methoden an eine Klasse und nicht an Objekte gekoppelt sein und genau das erreicht man mit static -> um Methoden aus Klassen und nicht von Objekten zu nutzen, benutze static.

MfG
 

njans

Top Contributor
Folgende Fragen hätte ich:
1. Wenn ich das Wort "static" in der Klasse Berechnung nicht angebe, bekomme ich einen Fehler. Warum?
Weil du versuchst eine Methode eines Objektes aufzurufen, ohne ein Objekt zu haben. Du kannst auch keinen Knopf auf der Fernbedienung drücken, wenn du diese nicht hast ;)
Java:
// Static:
int endbetrag = berechnung.rechnen(100, 5);

// Oder eben OOP
int endbetrag = new berechnung.rechnen(100,5);

2. Ich habe in dem Beispiel keinen Konstruktor angegeben. Was passiert im Hintergrund, wenn ich keinen angebe?
Java erstellt einen Deault-Constructor. Dieser hat dann eben keine Parameter und es werden eben dann nur die Instanzvariablen mit dem Defaultwert initialisiert (int = 0, Object = null, etc.).

3. Sollte man Berechnungen eher innerhalb der main-Klasse in Methoden packen oder als separate Klassen auslagern?
---
Für die Berechnung von 2 Zahlen lohnt es sich kaum, Klassen dafür zu schreiben. Wenn du aber einen Kontext abbilden willst, dann sind die Berechnungen meist teil einer Klasse.
 

ciber

Mitglied
Danke für die superschnelle Antwort :).

Also sollte ich die static Variante vermeiden?

Ich kannte bisher nur die Variante
Java:
klassenname endbetrag = new endbetrag(werte für konstruktor)

endbetrag.berechnen(werte für methode)
 

njans

Top Contributor
Ist ein Objekt dann eine Instanz?
Ja. Im Deutschen Raum verwendet man, wie auch im Englischen, den Begriff Instanz. Besser wäre wohl Exemplar. Versuch das aber mal den Leuten beizubringen ;)

klassenname endbetrag = new endbetrag(werte für konstruktor)

endbetrag.berechnen(werte für methode)

Das ist beinahe das gleiche, wie mein Beispiel. Hier hast du aber die variable endbetrag, welche eine Referenz auf die Instanz (Exemplar) hält. In meinem Beispiel habe ich das Objekt nur erstellt, um die eine Methode an ihm aufzurufen. Anschließen wird es von Java "auf den Müll geworfen".
In deinem Beispiel kannst du natürlich noch mehr mit deinem Objekt anfangen.
 

JavaMeetsBlueJ

Bekanntes Mitglied
Ist es eigentlich "schlecht" bzw nicht gern gesehen, wenn man den Logikteil, also die Methoden zum Rechnen besipielsweise, statisch macht? In meinen Augen ist ein Objekt einer Logik nicht so ganz nachvollziehbar in Hinblick auf die Realität(Objekt der Klasse Lampe = ok, ist ja klar aber ein Objekt von Mathe?), weshalb ich selbst die static-Variante bevorzuge
 
A

asdf1234

Gast
Ist es eigentlich "schlecht" bzw nicht gern gesehen, wenn man den Logikteil, also die Methoden zum Rechnen besipielsweise, statisch macht? In meinen Augen ist ein Objekt einer Logik nicht so ganz nachvollziehbar in Hinblick auf die Realität(Objekt der Klasse Lampe = ok, ist ja klar aber ein Objekt von Mathe?), weshalb ich selbst die static-Variante bevorzuge
Guten Morgen. Die Verwendung von statischen Methoden in Helper-Klassen wurden bereits in der zweiten Antwort erwähnt.
 

Neue Themen


Oben