Skocz do zawartości

[java] - powiązanie obiektów?


pamparampa

Rekomendowane odpowiedzi

Witam. Mój problem dotyczy zadania, ale chcę tylko, żebyście pomogli mi zrozumieć polecenie :).

Brzmi ono w skrócie:

Zdefiniuj klasę Hotel . Każdy hotel ma określoną liczbę numerowanych pokoi rozmieszczonych na

poszczególnych piętrach. Liczba pięter i liczba pokoi na każdym piętrze jest ustawiana w momencie tworzenia

obiektu. Pokój jest identyfikowany przez obiekt klasy NumerPokoju ( o polach pietro i pokoj ) . Określony

pokój jest wynajęty jeśli jest z nim powiązany obiekt klasy Osoba. Jedna osoba może

wynajmować wiele pokoi.

 

Problem polega głównie na tym, że nie wiem co to znaczy "...pokój jest wynajęty, jeśli jest z nim powiązany obiekt klasy Osoba. Czy mam to rozumieć jako powiązanie obiektu Osoba z obiektem NumerPokoju? czy w ogóle jest w Javie coś takiego jak powiązanie dwóch obiektów? i jak to się robi? Sorry, jeśli te pytania są zbyt banalne, ale jestem w javie trochę początkujący :)

Odnośnik do komentarza
Udostępnij na innych stronach

Ja tu nawet problemu żadnego nie widzę :P . W ogóle, czy w rzeczywistości/realu/matrixie czy jak to programiści teraz nazywają (o ile w ogóle im jest te pojęcie potrzebne) mówisz "jestem powiązany z pokojem [...], a on ze mną", czy może prędzej "mój pokój to [...]"? Jeśli to drugie, no to najzwyczajniej w świecie przenieś to na kod - to człowieka interesuje jaki ma pokój, nie na odwrót. Oczywiście ma to też swoje uzasadnienie praktyczne (instancje Człowieka -> jeden pokój, a nie jeden pokój -> lista instancji Człowieka). Podsumowując: walnij sobie w klasie Człowiek zmienną typu Pokój o nazwie myRoom, wskazującą oczywiście na obiekt będący pokojem danego ludzia.

 

Sorry za mieszanie języków i polskie znaki.

Odnośnik do komentarza
Udostępnij na innych stronach

Ale wtedy jak będę chciał sprawdzić kto wynajmuje dany pokój to będzie problem bo będzie trzeba albo przeszukać wszystkie osoby, albo w pokoju też robić zmienną typu osoba, która wskazuje na osobę wynajmującą ten pokój. Tylko czy to rozwiązanie nie będzie mało eleganckie? Sądziłem, że może jest jakaś metoda która wiąże dwa obiekty czy coś podobnego...

Odnośnik do komentarza
Udostępnij na innych stronach

sernat, nie piernicz :)

jest sobie manager, ktory zarzadza parcelowaniem pokoi osobom. jak osoba rezerwuje pokoj, to laczysz jego id z id pokojem, nie na odwrot.

Odnośnik do komentarza
Udostępnij na innych stronach

jutro zarzuce kodem, bo piszac zauwazylem, ktora godzina i co dzis za dzien :)

Odnośnik do komentarza
Udostępnij na innych stronach

sernat, nie piernicz :)

jest sobie manager, ktory zarzadza parcelowaniem pokoi osobom. jak osoba rezerwuje pokoj, to laczysz jego id z id pokojem, nie na odwrot.

Nie pierniczę, prosta sprawa, ale trza uświadomić kolegę. Ważne, żeby wszystko miało też swoje uzasadnienie logiczne, patrząc na całość przez pryzmat OOP. No i pojęcie "id" to kojarzy mi się co najwyżej z GMem. Mówimy tutaj o jednej zmiennej i oczywiście funkcjach operujących na niej, np. setterze i getterze.

 

Btw z tego twojego "łączenia" nie wynika, kto przechowuje informację. Konkrety pls.

 

Pamparampa: Rozwiązanie będzie jak najbardziej eleganckie.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Definiujesz sobie w klasie tak:

 

public Osoba osoba = null;

 

A potem gdzieś w jakiejś metodzie:

 

public void function wynajmijPokoj() {
osoba = new Osoba();
}

 

i aby sprawdzic:

public bool czyWynajety() {
return osoba != null;
}

 

O to chodzi?

 

Edit: ofc, dla wiecej niz jednoosobowego pokoju moze byc lista albo tablca osób w tym pierwszym, i wtedy bedzie osoba.add(new Osoba()); w wynajmijPokoj(); (moze tez byc przeciazona metoda, ze podajesz jako argument int ileOsob).

Odnośnik do komentarza
Udostępnij na innych stronach

To ja jeszcze poczekam na rozwiązanie YXE, bo jego pomysł wydaje mi się najbardziej odpowiedni :). Pewnie jest dużo sposobów, żeby to rozwiązać, ale chcę to zrobić jakimś optymalnym sposobem, a wydaje mi się, że tu bardziej chodzi o powiązanie dwóch obiektów, a nie takie coś, że robimy jednemu obiektowi zmienną typu drugi obiekt, a ten drugi obiekt nawet nie wie, że coś go łączy z tym pierwszym :D (np. co zrobię jak będę chciał sprawdzić, czy dana osoba wynajmuje jakiś pokój?). Nie wiem, ja się nie znam ale tak mi się wydaje.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Możesz w osobie zrobić przypisanie do pokoju:

 

class Osoba {
public Pokoj pokoj = null;
public void Osoba(Pokoj p) {
pokoj = p;
}
public bool czyWynajelaCos() {
return Pokoj != null;
}
}

class Pokoj {
public Osoba osoba= null;
public void function wynajmijPokoj() {
osoba = new Osoba(this);
}
}

 

to w sumie wynika z powyższego kodu ;) Ale może YXE ma coś ciekawszego do pokazania

Odnośnik do komentarza
Udostępnij na innych stronach

sernat, ID jest po to, by zachowac dobry performance przy przeszukiwaniu polaczen pokoj-osoba, ktore osobno sa trzymane w mapach, zamiast porownywac referencje (bad), czy cale obiekty (very bad) :)

 

(po pracy wrzuce kod)

Odnośnik do komentarza
Udostępnij na innych stronach

sernat, ID jest po to, by zachowac dobry performance przy przeszukiwaniu polaczen pokoj-osoba, ktore osobno sa trzymane w mapach, zamiast porownywac referencje (bad), czy cale obiekty (very bad) :)

 

(po pracy wrzuce kod)

Sam jesteś bad :P . Bad to jest użycie tablicy w takim wypadku zamiast listy, no ale to w sumie chyba każdy wie. A patentów są dziesiątki w zależności od potrzeby. Byle by w przyszłości "rozszerzać, a nie usuwać/edytować klasy i ich metody", czy jak to szło ;) .

 

Btw. "porównywanie całych obiektów" to nie jest żadne very bad, to byłby po prostu debilizm. Ale nie wiem jak można na to wpaść.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...