Klassen Klasse oder nicht Klasse - das ist hier die Frage

sprottenwels

Neues Mitglied
Hallo Gemeinde,

Bevor ich zu meiner eigentlichen Frage komme ein kurze Info, von der ich denke sie könnte zum Beantworten nützlich sein:

Ich bin Berufseinsteiger Fachrichtung FIAE und beschäftige mich derzeit im Betrieb mit VB 6.0 und VB.net. Von daher bin ich es gewohnt Anwendungen schnell zusammen zuklicken und "einfach drauflos" zu programmieren.

Nun gefällt mir aber weder die Sprache noch der Stil den ich pflege und daher möchte ich mich privat in Java einarbeiten. Gesagt getan, ich lese das Buch "Java ist auch eine Insel".

Nun meine Frage: ich verstehe zwar das Grundprinzip der Objektorientierung, jedoch fällt es mir sehr schwer das ganze auf ein reales Projekt anzuwenden. Ich bin unsicher in welchen Fällen es Sinnvoll ist eine Klasse zu deklarieren und wann nicht, wie allgemein diese gehalten werden sollten und ähnliches.

Zum Beispiel:
Nehmen wir an es soll ein Spiel programmiert werden bei dem 2 Armeen gegeneinander antreten. Jede Armee hat verschiedene Arten von Kämpfern welche unterschiedliche Aktionen ausführen können.

Deklariere ich nun eine allgemeine Klasse "Armee" oder lieber doch 2 ("Armee Rot", "Armee Blau")?
Oder lasse ich die Armeeklasse ganz weg und füge stattdessen nur eine Klasse "Soldaten" hinzu? Als dritte Möglichkeit fiele mir ein sowohl eine Armeeklasse, als auch eine Klasse für jeden verschiedenen Soldatentyp zu erstellen. Das erscheint mir dann aber doch wieder sehr überladen.

Ich hoffe mein Grundproblem wird deutlich, jedenfalls bedanke ich mich im Voraus schonmal bei allen Helfern 🙂
 
Hallo,

leider hast du die objektorientierung nicht verstanden.

Eine Armee rot und blau sind instanzen einer Klasse Armee.

Du musst immer eine Klasse in Java machen, von daher braucht man sich nicht zu überlegen, ob man das will oder nicht.

Wenn du zwei unterschiedliche Verhalten hast, dann wirst du zwei Klassen haben, wenn diese gleiche Verhalten haben, werden sie von einer KLasse erben.

Tipp: Versuche das Beispiel mit den Tieren zu implementieren.

Hunde und Katzen sind Tiere und und alle sollen gibLaut() jeweils ihre Laute auf der Konsole ausgeben.

Gruß,

MArtin
 
Ich würde denke ich, je nachdem wie stark sich die Kämpfer unterscheiden erstmal eine Grundlasse für Kämpfer schreiben. In dieser sind dann die Attribute Name, Art und Angriffsstärke enthalten. Wenn es noch was besonderes wie Panzer gibt, können diese Klassen ja auch von Kämpfer erben ^^. Dann eine Klasse Armee in der die Anzahl von jeweiligen Kämpeypen enthalten ist. Und dann eine Klasse Schlacht, wo die Party steigt^^.

Gruß

|edit:

Und von der Klasse Armee erzeugst du erstmal zwei Objekte, in denen du dann wieder ganz viele Objekte der Klasse Kämpfer erzeugst ^^.
 
Zuletzt bearbeitet:
Bis hierhin schonmal Danke.

Bleiben wir kurz bei dem Beispiel Tiere.

Meine Lösung wäre dann bis jetzt:

Java:
public class Animals {

    String name, age, legs, call ;

   void Call() {

        System.out.println(call) ;

    }

Java:
public class testproject {

	public static void main(String[] args) {

		
	
		Animals Dog = new Animals() ;
		
		
		Dog.call = "Woof" ;
                Dog.Call() ;


	}

}

Was aber, wenn nun noch ein zweiter Hund dazu käme, der statt "Woof", "Weef" macht? Und ein Vogel der piept.
Klar, ich könnte

Animals Bello, Fiffi, Peter ;

deklarieren und die Attribute jeweils passend zuordnen.

Aber wäre es nicht sinnvoller in der Klasse "Animals" jeweils eine Unterklasse "Dogs" und "Birds" anzulegen? Damit sollte es dann doch möglich sein etwas wie

Animals.Dogs Fiffi = new Animals.Dogs() ;

zu schreiben, was im Vergleich zu

Animals Fiffi = new Animals() ;

deutlicher wäre, weil so sofort klar ist dass es sich um einen Hund und nicht um einen Vogel handelt, oder?
 
Ich frage mich allen Ernstes wie du mit derart wenig Ahnung von Programmierung eine Ausbildung zum FIAE erfolgreich abgeschlossen haben sollst ...
 
Java:
public class Animals {
 
private String name, age, legs, call ;
 
public Animals(String name, String age, String legs, String call){
this.name = name;
this.age = age;
this.legs = legs;
this.call = call;
}
public String getCall(){            
return call;
}
public String getAge(){
return age;
}
public String getLegs(){
return legs;
}
public void setCall(String call){
this.call = call;
}
}

Java:
public class Testproject {      //Klassennamen groß, Methodennamen klein 
 
    public static void main(String[] args) {
 
        
    
        Animals dog = new Animals("bello", "7", "4", "wuff") ;  //Bezeichner klein
        System.out.println("Animals name is: " + dog.getName());
        dog.setCall(wau);
        System.out.println("Animals call is: " + dog.getCall());
 
 
    }
 
}

🙂 Hilft dir das? Müsste stimmen ^^

||edit: Wenn du nämlich im Konstruktor den namen oder die art oder was auch immer mitlieferst, ist es auch direkt klar ^^
 
Zuletzt bearbeitet:
Zum Beispiel:
Nehmen wir an es soll ein Spiel programmiert werden bei dem 2 Armeen gegeneinander antreten. Jede Armee hat verschiedene Arten von Kämpfern welche unterschiedliche Aktionen ausführen können.

Deklariere ich nun eine allgemeine Klasse "Armee" oder lieber doch 2 ("Armee Rot", "Armee Blau")?
Oder lasse ich die Armeeklasse ganz weg und füge stattdessen nur eine Klasse "Soldaten" hinzu? Als dritte Möglichkeit fiele mir ein sowohl eine Armeeklasse, als auch eine Klasse für jeden verschiedenen Soldatentyp zu erstellen. Das erscheint mir dann aber doch wieder sehr überladen.

Ich hoffe mein Grundproblem wird deutlich, jedenfalls bedanke ich mich im Voraus schonmal bei allen Helfern 🙂


OK.

Ich arbeite mal deine Fragestellung so ab wie ich es normal mache.
(Ich gehe von einer Mittelalterarmee aus machts einfacher!)

Mein Ansatz wäre folgender Gedanke. Mal davon abgesehen würde ich Arme nicht als Klasse ausarbeiten. Du müsstet die Armee eher so gestalten das es nur ein Zugehörigkeitswert ist.
Stell dir halt vor.

Es gibt eine Klasse Einheit. Diese besitzt die Grundeigenschaft.
Daraus leitest du die einzelnen anderen Einheiten ab (z.b Soldat, Bogenschütze, Reiter, ect).

Diese haben alle besondere Eigentschaften die sie auszeichnen. Darum sind sie auch nicht Einheiten mehr per se sie sind mehr eine Erweitung der Einheit.

D.h eine Einheit hat grob gesagt einen Einheitstyp,Aussehen, Angriffart,Schaden, Bewegungsgeschwindigkeit usw.
(nur beispiele)

Warum also diese ganze Klassen erschafferei?
Damit du verschiedene Einheiten erzeugen kannst.
Du schaffst dir eine Schablone und baust die Einheiten daraus die du willst.
Der Sinn ist einfach das du eine Vorgabe hast die jede Einheit braucht damit sie funktioniert.
D.h alles was von dieser Hauptklasse erbt hat alle Grundeigentschaften, die Besonderheiten schreibst du dann in die entsprechende Subklasse.

So was heißt also Subklasse und Hauptklasse? ganz einfach gesagt vererbst du die Klasse.

D.h die Klasse Soldat erbt alle Eigentschaften und Methoden von Einheit. (lies dir dazu was durch ist eig. ganz einfach)
Merk dir das Schlüsselwort extends einfach.
Der Klassenheader schaut nämlich dann so aus:

Java:
public class Soldat extends Einheit {

Dieses Schlüsselwort extends gibt nämlich alles von Einheit weiter an Soldat!
So weiter im Kontext =)

Wie du die Armee ansich darstellst? (also damit man weiß welche Armee es ist)
Gruppier die Objekte einfach. du kannst eine Group erstellen, sie in ein Array speichern, what ever.
Es muss nur für dich sichtlich sein das du weißt welche Einheit zu welcher Armee gehört.


Also als Zusammenfassung:

- Grundklasse Einheit (dient als Schablone für alle Arten für Soldaten)
- Die einzelnen Einheiten demnach erstellen; D.h du erstellst neue Klassen die erben
(es kann auch sein das ein Reiter 2 Subklassen hat; nämlich Reiter mit Schwert und Reiter mit Bogen)
- Eine Art Container für die Einheiten erstellen
(soll die Armee darstellen; Kann ein Array sein, eine Collection oder was dir im Kopf rumschwebt)

Hoffe das beantwortet deine Frage 🙂
(war ja ganz schön viel Text)


lg

Rene

PS: Mit Group meine ich keine spezifische Klasse sondern mehr eine Klasse die du zur Gruppierung erfindest, erstellst 😉
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben