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.

🙁
 
Java:
IrgendeineKlasse.berechnung(...);
Wenn du aber OOP Konzepte verstehen/nutzen willst solltest du nicht mit static arbeiten.
 
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.
 
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?
---
 
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
 
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.
 
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)
 
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.
 
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
 
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


Zurück
Oben