Kleine Frage zu OOP

jono

Top Contributor
Java:
public class Familie {

    /*
     * Die "Familie" hat folgende private-Eigenschaften
     *  - "name" vom Typ String
     *  - "meldung" vom Typ Haus
     *  - "familienmitglieder" vom Typ Person-Array

Meine Frage: Weiß einer, wie das gemeint ist mir vom Typ Haus ?
Verstehe das nicht , steht so in der Aufgabenstellung.
 
Anhand von dem was ich sehe kann ich dir nicht helfen, allerdings könnte sich das ändern, wenn du uns mehr Material zeigst wie u.a. die Aufgabenstellung.
 
Java:
public class Familie {

    /*
     * Die "Familie" hat folgende private-Eigenschaften
     *  - "name" vom Typ String
     *  - "meldung" vom Typ Haus
     *  - "familienmitglieder" vom Typ Person-Array
     *
     * Erstellen Sie Standard Getter und Setter für alle Eigenschaften.
     * (Bitte automatisch generieren lassen!)
     *
     * Implementieren Sie einen Konstruktor mit name, meldung und familienmitglieder als Parameter.
     * Die Parameter-Werte vom Konstruktor sollen bei den Klasseneigenschaften übernommen werden.
     *
     * Implementieren Sie eine public-Methode "ummelden",
     * der die Familie vom alten Haus abmeldet und in ein neues Haus anmeldet.
     * Die public-Methode "ummelden" erhält ein Haus und gibt ein boolean zurück.
     * Die Methode liefert nur dann true, wenn das Anmelden und Abmelden funktioniert hat und
     * die Meldung aktualisiert wurde.
     * Wenn zum Beispiel die Anmeldung funktioniert aber die Abmeldung nicht, dann muss die Anmeldung
     * wieder rückgängig gemacht werden, bevor false zurückgegeben wird.
     *
     * Zum An- und Abmelden kann die Methode aus Haus verwendet werden
     * z.B. meldung.abmelden(this); würde dieses Objekt von dem gemeldeten Haus abmelden.
     *
     */
    
}
 
Ich gehe davon aus, dass in der Aufgabe angenommen wird, dass es eine andere Klasse (Haus) gibt, welche Objekte vom Typ Haus generiert, welche in den Attributen von Familie halt zugewiesen werden können.
 
Java:
public class Haus {

    /*
     *
     * Das "Haus" hat folgende private-Eigenschaften:
     *
     * - "adresse" vom Typ String
     * - "besitzer" vom Typ Person
     * - "anzahlWohneinheiten" vom Typ int
     * - "bewohner" vom Typ Familie-Array
     *
     * Erstellen Sie Standard Getter und Setter für alle Eigenschaften.
     * (Bitte automatisch generieren lassen!)
     *
     * Implementieren Sie einen Konstruktor mit adresse, besitzer und anzahlWohneinheit als Parameter.
     * Die Adresse und der Besitzer sollen übernommen werden.
     * Wenn die Anzahl der Wohneinheiten kleiner als 1 sein sollte, dann soll 1 dafür verwendet werden.
     * Die Anzahl der Wohneinheiten definiert die Länge des Arrays der Bewohner.
     * Zu Beginn wohnen keine Bewohner und die Elemente des Arrays sind alle "null".
     *
     * Implementieren Sie die Methode "anmelden" bzw. "abmelden",
     * die ein Familien-Objekt als bewohner hinzufügt bzw. entfernt.
     *
     * Die public-Methode "anmelden" erhält eine Familie und gibt ein boolean zurück.
     * Die Familie wird an eine freie Stelle im Array hinzugefügt.
     * Eine Wohneinheit ist frei, wenn das Element im Array der Bewohner "null" ist.
     * Ein Familien-Objekt darf nicht mehrfach im Bewohner-Array auftauchen.
     * Sobald die Familie erfolgreich hinzugefügt wurde, gibt die Methode true zurück,
     * ansonsten false;
     *
     * Die public-Methode "abmelden" erhält eine Familie und gibt ein boolean zurück.
     * Falls das Familien-Objekt im Bewohner-Array vorhanden ist,
     * wird deren Wohneinheit als frei markiert und true zurückgegeben,
     * ansonsten wird false zurückgegeben
     *
     */
    
}

[Code=Java]
public class Person {
    
    /*
     * Die "Person" hat die private-Eigenschaft "name" vom Typ String,
     * die dazugehörigen Getter und Setter (Bitte automatisch generieren lassen!)
     * und einen Konstruktor mit dem Namen als Parameter.
     *
     */
    
}

Ja, habe zu wenig angegeben stimmt 😛 Muss ja schon alles dargestellt sein, da es ja direkt miteinander zusammenhängt.
 
Also am Anfang steht ja immer private mir ist auch klar wenn es vom Typ String oder int z.B. ist, wie ich das dann anzugeben habe, aber nicht wie ich es zu machen habe, wenn ich die private-Eigenschaften einer bestimmten Klasse durch ein Attribut in einer anderen Klasse wiederzugeben.
 
wenn du eine Familie erzeugst

Familie familie = new Familie()
dann hast du ein Object vom Typ Familie ("in" der Variable familie)

für den Typ Haus, musst du eine Klasse Haus haben

Code:
public class Haus {

}

Object erzeugen
Haus haus = new Haus()

und haus übergibst du dann genau so wie du auch einen String übergibst

und beim private nutzt du dann logischerweise getter und setter (wie du es auch beim String machst)
nutzt da dann aber anstatt String die Klasse Haus
 
Okay, habe dann in der Klasse Haus "Haus haus = new Haus()" erzeugt, richtig?
Und dann in der Klasse Familie "private Haus meldung" oder nicht?
Denn das funktioniert nicht, wenn ich es so mache, kann auch gut sein, dass ich etwas falsch verstanden habe. Aber so würde ich es machen, wenn ich dem folge was du geschrieben hast 🙂.
 
zum einen hilft die Aussage "das funktioniert nicht" nicht weiter, WAS funktioniert nicht, was passiert oder was nicht
zum anderen, wenn du das nachfolgende nicht verstehst muss ich dich an einsteiger Literatur verweisen.
dir dafür den fertigen Code schreiben, wird dir null helfen

Code:
public class MainClass {
    public static void main(String[] args){
   
    Haus haus = new Haus();   
    Familie familie = new Familie();
    familie.setMeldung(haus);
    }
}

public class Familie {
// hier getter und setter generieren
}

public class Haus {
// hier getter und setter generieren
}

public class Person {
// hier getter und setter generieren
}
 
Okay, danke, so habe ich das auch gelernt, habe es eben aber falsch verstanden.
Wie generiere ich denn jetzt das Person-Array "familienmitglieder" , also wahrscheinlich das Objekt in der Main erzeugen und dann?
 
Schon gut, es scheint so als hätte ich es gerade erzeugt, ich probiere mich jetzt erstmal weiterhin an der Aufgabe, bei wirklichen Problemen, schreibe ich dann wieder in den Thread im weiteren Verlauf des Tages.
 
ob die Main der richtige Ort dafür ist kommt auf das an was du da baust, war zur schnellen veranschaulichung aber gut genug weil du geschrieben hast in der Klasse Haus ein Objekt vom Typ Haus erzeugen zu wollen (das wirkte etwas wirr)

Person Array
erzeugst du halt genau so wie ein Objekt vom typ Haus oder Familie oder String, halt vom Typ Array und stopfst da Personen Objekte rein

 
Java:
public class Program {

    public static void main(String[] args) {
        Haus meldung = new Haus();
        Familie familie = new Familie();
        Person person = new Person();

    }

}


public class Familie {

    private String name;
    private Haus meldung;
    private Person[] familienmitglieder;

    public Familie(String name, Haus meldung, Person[] familienmitglieder) {
        this.name = name;
        this.meldung = meldung;
        this.familienmitglieder = familienmitglieder;
    }

    public void ummelden(meldung) {
        meldung.anmelden(this);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Haus getMeldung() {
        return meldung;
    }

    public void setMeldung(Haus meldung) {
        this.meldung = meldung;
    }

    public Person[] getFamilienmitglieder() {
        return familienmitglieder;
    }

    public void setFamilienmitglieder(Person[] familienmitglieder) {
        this.familienmitglieder = familienmitglieder;
    }

}


public class Haus {

    private String adresse;
    private int anzahlWohneinheiten;
    private Person besitzer;
    private Familie[] bewohner;

    public Haus(String adresse, int anzahlWohneinheiten, Person besitzer, Familie[] bewohner) {
        this.adresse = adresse;
        this.anzahlWohneinheiten = anzahlWohneinheiten;
        this.besitzer = besitzer;
        this.bewohner = bewohner;
    }

    public void anmelden() {
      
    }

    public void abmelden() {

    }


    public String getAdresse() {
        return adresse;
    }

    public void setAdresse(String adresse) {
        this.adresse = adresse;
    }

    public int getAnzahlWohneinheiten() {
        return anzahlWohneinheiten;
    }

    public void setAnzahlWohneinheiten(int anzahlWohneinheiten) {
        this.anzahlWohneinheiten = anzahlWohneinheiten;
    }

    public Person getBesitzer() {
        return besitzer;
    }

    public void setBesitzer(Person besitzer) {
        this.besitzer = besitzer;
    }

    public Familie[] getBewohner() {
        return bewohner;
    }

    public void setBewohner(Familie[] bewohner) {
        this.bewohner = bewohner;
    }

}


public class Person {

    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
 
Das sind jetzt erstmal die Standardsachen, die die Aufgabe verlangt.
Jetzt bin ich bei Aufgabenstellung Familie hängengeblieben.
Java:
public class Familie {

    /*
     * Die "Familie" hat folgende private-Eigenschaften
     *  - "name" vom Typ String
     *  - "meldung" vom Typ Haus
     *  - "familienmitglieder" vom Typ Person-Array
     *
     * Erstellen Sie Standard Getter und Setter für alle Eigenschaften.
     * (Bitte automatisch generieren lassen!)
     *
     * Implementieren Sie einen Konstruktor mit name, meldung und familienmitglieder als Parameter.
     * Die Parameter-Werte vom Konstruktor sollen bei den Klasseneigenschaften übernommen werden.
     *
     * Implementieren Sie eine public-Methode "ummelden",
     * der die Familie vom alten Haus abmeldet und in ein neues Haus anmeldet.
     * Die public-Methode "ummelden" erhält ein Haus und gibt ein boolean zurück.
     * Die Methode liefert nur dann true, wenn das Anmelden und Abmelden funktioniert hat und
     * die Meldung aktualisiert wurde.
     * Wenn zum Beispiel die Anmeldung funktioniert aber die Abmeldung nicht, dann muss die Anmeldung
     * wieder rückgängig gemacht werden, bevor false zurückgegeben wird.
     *
     * Zum An- und Abmelden kann die Methode aus Haus verwendet werden
     * z.B. meldung.abmelden(this); würde dieses Objekt von dem gemeldeten Haus abmelden.
     *
     */
   
}

1.Es heißt ja, dass Parameter-Werte vom Konstruktor bei den Klasseneigenschaften übernommen werden sollen, was ist damit genau gemeint, ist mir als Anfänger eine unverständliche Beschreibung.
2.Die public Methode "ummelden" bekommt soll ein Haus erhalten, ich habe deshalb "meldung" in der public methode ummelden eingegeben, aber dann steht dort die Fehlermeldung: Syntax error, insert "... VariableDeclaratorId" to complete FormalParameterList.
 
zu1)
Code:
private String name;
    private Haus meldung;
    private Person[] familienmitglieder;

    public Familie(String name, Haus meldung, Person[] familienmitglieder) {
        this.name = name;
        this.meldung = meldung;
        this.familienmitglieder = familienmitglieder;
    }

deine Eigenschaften sind name, meldung und familienmitglieder
in deinem Konstruktor übergibst du entsprechende "Werte" damit für ein neues Objekt vom entsprechenden Typ die "Werte" von Beginn an gesetzt sind

Wenn du z.B. ein Auto bauen würdest, dann würde

Auto auto = new Auto()
eher keinen Sinn machen, weil du nicht erst entscheidest wenn das Auto fertig ist, was es für ein Auto ist, also

Code:
Auto auto = new Auto("Golf")

die Farbe des Autos lässt sich aber auch machen wenn das Auto (dein Golf) schon fertig ist

Code:
Auto auto = new Auto("Golf")
auto.setFarbe("grün")

zu2)
was machst du bei deinen Settern set...() anders als bei deiner Methode ummelden?

Vielleicht solltest du dir als Anfänger mal ein Buch nehmen und die Grundlagen lesen und dir nicht einfach was zusammen "klicken"
 
Okay, unnötiger Fehler, danke.
Bei der Aufgabenstellung der Klasse Familie, steht ja jetzt ich soll abmelden und ummelden? dazu hab ich mir erstmal gedacht, dass das die Klasse Haus mit einbezogen werden muss, das alte Haus soll abgemeldet werden und das neue soll angemeldet werden. Jetzt stellt sich mir die Frage wie das gemacht, mir fällt da wirklich keine Funktion ein das zu machen.
 
Zum Beispiel daran das du diese wirklich einfache Aufgabe nicht alleine gelöst bekommst

oder daran das du nicht weißt wie man einen Parameter in einer Methode angibt
Mit dem Fehler der dir von der IDE angezeigt wird nichts anfangen kannst
Oder auch nicht nach diesem Fehler googeln kannst

lies die ersten Kapitel eines Java Anfänger Buches und die Aufgabe ist schnell gelöst
 
Okay, habe mir gerade mal den Schrödinger bestellt.
Eine Bitte habe ich, unzwar wollte ich fragen, ob du mir einen Ansatz geben kannst, wie ich das An-und Abmelden angehen kann? Dafür wäre ich dir sehr dankbar, und hoffe, dass du dafür ein bisschen Verständnis hast.
 
Überlege Dir doch erst einmal in Worten, was das abmelden und woanders anmelden bedeutet.

Hast du die Beschreibung der Klassen soweit verstanden um zu wissen, was welche Klasse enthält? Das ist der erste, wichtige Schritt. Dann halt in Ruhe überlegen (Stift und Papier!), was für Situationen es geben kann. Dann überlegen, was sich da dann bei dem ab- und anmelden ändert, sprich: wie soll es danach aussehen?
Wenn du das hast, dann halt wie gefordert: in Worten erläutern, was geändert werden muss.
 
Java:
public class Familie {

	private String name;
	private Haus meldung;
	private Person[] familienmitglieder;

	public Familie(String name, Haus meldung, Person[] familienmitglieder) {
		this.name = name;
		this.meldung = meldung;
		this.familienmitglieder = familienmitglieder;
		}
1. Noch eine Frage zu "private Haus meldung", Wenn ich das Objekt Familie in der main erzeuge, dann kann ich ja Werte wegen dem Konstruktor eingeben, was kann man dann für "Haus meldung" eintragen, da dies ja vom Typ Haus ist ?
2. Beim Anmelden erhöht sich die anzahlWohneinheiten um eine Einheit, und es wird eine neue Adresse hinzugefügt,
beim Abmelden vermindert sich anzahlWohneinheiten um eine Einheit und die Adresse wird erstmal auf null gesetzt, weil es ja sein kann, dass diese Familie sich wieder woanders anmeldet oder eben auch nicht.
 
Zu 1 nochmal, also ich will wissen was ich in der main bei der objekterzeugung in den Klammern nach dem new…() statt Haus meldung eingeben kann, das ist ja sozusagen nur der Platzhalter.
 
Die public-Methode "anmelden" erhält eine Familie und gibt ein boolean zurück.
Die Familie wird an eine freie Stelle im Array hinzugefügt.
Eine Wohneinheit ist frei, wenn das Element im Array der Bewohner "null" ist.
Ein Familien-Objekt darf nicht mehrfach im Bewohner-Array auftauchen.
Sobald die Familie erfolgreich hinzugefügt wurde, gibt die Methode true zurück,
ansonsten false;

Das beschreibt es ja genau
 
Java:
Eine Wohneinheit ist frei, wenn das Element im Array der Bewohner "null" ist.
Ein Familien-Objekt darf nicht mehrfach im Bewohner-Array auftauchen.

Das würde ich mit einer If-Abfrage angehen.
 
Java:
 * Die public-Methode "abmelden" erhält eine Familie und gibt ein boolean zurück.
	 * Falls das Familien-Objekt im Bewohner-Array vorhanden ist, 
	 * wird deren Wohneinheit als frei markiert und true zurückgegeben,
	 * ansonsten wird false zurückgegeben

Das verwirrt mich etwas, denn hier wird geschrieben " falls das Familien-Objekt" im Bewohner-Array vorhanden ist.
Das Familien-Objekt wäre dann doch sowas wie -> Familie familie = new Familie();
Aber wie ich das Bewohner Array und das Objekt zusammenbringen kann, ist mir absolut nicht klar, auch wenn wir Folien zu OOPM bekommen haben, wird sowas dort nicht behandelt.
 
Java:
class Foo {
    private int[] intData;
    
    public Foo(int[] data) {
        this.intData = data;
    }
    
    public boolean remove(int someInt) {
        // wenn someInt in intData enthalten ist, dann entferne es daraus und gib true zurück
        // ansonsten gib false zurück
    }
        
}

Du hast ein Array von einem bestimmten Typen und sollst in der Methode herausfinden, ob ein bestimmtes Element darin enthalten ist. In deinem Fall handelt es sich halt nicht um "int" (wie in meinem Beispiel) sondern um "Familie". Wie das als Parameter übergebene Objekt erzeugt wird ist, für die Methode selbst nicht relevant.
 
Java:
public boolean anmelden(Familie[] bewohner) {
		int pos = Arrays.asList(bewohner).lastIndexOf(null);

		if (bewohner == null) {
			return true;
		} else {
			return false;

		}
	}

Ich habe es so gemacht, glaube aber, dass dort auf jeden Fall ein Fehler drin ist.
Aber laut Aufgabenstellung soll es ja so sein, dass eine Wohneinheit frei ist, wenn das Element im Array der Bewohner "null" ist.
Und ->Ein Familien-Objekt darf nicht mehrfach im Bewohner-Array auftauchen.
Sobald die Familie erfolgreich hinzugefügt wurde, gibt die Methode true zurück,
ansonsten false;
 
Java:
public boolean anmelden(Familie[] bewohner) {
        int pos = Arrays.asList(bewohner).lastIndexOf(null);

        if (bewohner == null) {
            return true;
        } else {
            return false;

        }
    }

Ich habe es so gemacht, glaube aber, dass dort auf jeden Fall ein Fehler drin ist.
Aber laut Aufgabenstellung soll es ja so sein, dass eine Wohneinheit frei ist, wenn das Element im Array der Bewohner "null" ist.
Und ->Ein Familien-Objekt darf nicht mehrfach im Bewohner-Array auftauchen.
Sobald die Familie erfolgreich hinzugefügt wurde, gibt die Methode true zurück,
ansonsten false;

Ich rate mal, dass du nicht ein Array von Familie sondern nur eine einzige Familie als Parameter übergeben sollst. Also anstatt Familie[] bewohner nur Familie bewohner
 
public boolean abmelden(Familie[] someFam) {
if(someFam==bewohner) {
someFam = null;
return true;
}else {
return false;
}

}
 
Java:
	public boolean abmelden(Familie[] someFam) {
	if(someFam==bewohner) {
		someFam = null;
		return true;
	}else {
		return false;
	}
		
	}
Das habe ich dazu?
 
Java:
* Die public-Methode "anmelden" erhält eine Familie und gibt ein boolean zurück.
	 1. Die Familie wird an eine freie Stelle im Array hinzugefügt.
	 2. Eine Wohneinheit ist frei, wenn das Element im Array der Bewohner "null" ist.
	 3. Ein Familien-Objekt darf nicht mehrfach im Bewohner-Array auftauchen.
	 4. Sobald die Familie erfolgreich hinzugefügt wurde, gibt die Methode true zurück,
	 5. ansonsten false;
Ist Punkt 1. mit -> int pos = Arrays.asList(bewohner).lastIndexOf(null); korrekt?
Punkt 2. müsste auch richtig sein, da abgefragt wird, ob …[] Bewohner == null ist, wenn ja ist es frei(=true?)
 

Zurück
Oben