Kapselung Von Klasse auf Objekt zugreifen

KKChris

Mitglied
Hallo liebes Forum,

kurz zu mir: Ich habe meine ersten Programmiererfahrungen in C/C++ gemacht und bisher schon einige Erfahrungen mit Klassen gemacht.
Das Studium zwingt mich nun auf einen Umstieg zu Java (was ich auf keinen Fall schlecht finde).
Nun war der theoretische Teil der Erklärung leider mangelhaft und ich stehe vor der ersten Übung.

Und nein natürlich will ich nicht, dass mir jemand die Übung macht, ich bräuchte nur ein paar Hinweise, da ich ja auch etwas lernen will 🙂

Folgendes Beispiel:

Ich habe eine Klasse namens "SingleRoomCtrl" sowie eine Klasse namens "SingleRoom".

In meiner Klasse SingleRoom habe ich 2 Variablen:

Java:
private int roomNumber;
private boolean occupied;


SingleRoomCtrl: Verwaltet die Einzelzimmer und hat Referenzen zu allen Einzelzimmern.
Nun schreibe ich in meiner "SingleRoomCtrl" ein paar Methoden um darauf zuzugreifen:

Java:
public void addRoom(SingleRoom room)           //Single Room hinzufügen
public void removeRoom(SingleRoom room)      //Single Room löschen

So nun kommen wir zu Problem 1:
Ich übergebe ja hier eine Instanz der Klasse "SingleRoom" welche ich vorher im Main anlegen müsste oder? Warum sollte ich einen Room adden, wenn ich ihn zuvor sowieso anlegen muss?

Problem 2:
Java:
public int getRoomCount()                           //returniert Anzahl Single Rooms

Wie kann ich abfragen, wieviele Instanzen einer Klasse existieren?





So das wars vorerst, sollte ich das total umständlich erklärt haben, lasst es mich wissen, dann lade ich das .pdf hoch.

Vielen Dank schonmal für eure Hilfe 🙂

Lg Chris
 
Hab mir mal die Aufgabe angeschaut.

Du mußt in der main-Methode kein Objekt SingleRoom oder DoubleRoom erstellen um es dann irgendwo hinzuzufügen.

In der main-Methode hast du lediglich ein ReservationCtrl zu erstellen und darauf die Methoden die das bietet aufzurufen.
Java:
public static void main(String[] args){
  ReservationCtrl reservationCtrl = new ReservationCtrl();
  reservation.addSingleRoom(101);
  reservation.addSingleRoom(102);
  reservation.addSingleRoom(203);
}

In der Methode
Code:
addSingleRoom()
hast du dann einen neuen SingleRoom zu erstellen und dann zu deinem SingleRoomCtrl hinzuzufügen. Nicht vergessen SingleRoomCtrl soll eine Variable der Klasse ReservationCtrl sein.
 
Oha, jetzt hab ich verstanden wie das gehen sollte 🙂
Vielen Dank 🙂

Kannst du noch kurz auf mein Problem 2 eingehen?

Werd heute mit dem implementieren beginnen und im Notfall nochmal posten, sollte etwas unklar sein.
 
Du hast ja mehrere getRoomCount() in deinem Programm

Das in ReservationCtrl.getRoomCount(), das retourniert (das Wort gefällt mir) die Anzahl aller Zimmer.

Das in Single/Double-RoomCtrl.getRoomCount(), das retourniert die Anzahl der Single/Double Zimmer.


in ReservationCtrl kann das dann so aussehen
Java:
public int getRoomCount(){
  return singleRoomCtrl.getRoomCount() + doubleRoomCtrl.getRoomCount();
}

Zu beachten ist, das du in ReservationCtrl Variablen für Single/DoubleRoomCtrl hast auf welche du hier zugreifst.


Und das getRoomCount() für die anderen Klassen bekommst du in dem du dort die Zimmer abspeicherst wenn du sie hinzufügst und dann nachzählst.
Arrays wären hier eine Möglichkeit, dynamische Datenstrukturen wie eine java.util.List eine andere.
Auch eine Map kann hier interessant sein. Dann können Zimmer anhand ihrer Nummer abgelegt werden.
 
Ok vielen Dank!
Eine kleine Frage noch.

Java:
private DoubleRoomCtrl DRC;
private SingleRoomCtrl SRC;
	
public void addSingleRoom(int roomNr)
{
	SingleRoom room = new SingleRoom();
	SRC.addRoom(room);
}

Also SingleRoom room = new SingleRoom(); darf ich benutzen, weil es ja eine Variable von SingleRoomCtrl ist oder?

Aber wie gebe ich nun die roomNr mit?

(Sollte ich da schon einen Denkfehler haben, bitte melden.)

Danke schonmal 🙂

EDIT: Konstruktor nötig oder?
 
Zuletzt bearbeitet:
Also roomNr müsstest du dem Konstruktor-Aufruf von SingleRoom mitgeben, nachträglich per Setter dem room-Objekt hinzufügen oder auch nachträglich SRC mitgeben (entweder beim Aufruf von addRoom oder danach). Eine andere als diese 3 Möglichkeiten gibt es in dem Fall nicht.
 

Zurück
Oben