Skocz do zawartości
pamparampa

[java] - powiązanie obiektów?

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 :)

Udostępnij tego posta


Odnośnik do posta
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.

Udostępnij tego posta


Odnośnik do posta
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...

Udostępnij tego posta


Odnośnik do posta
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.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

@YXE mógłbyś to jakoś bardziej wytłumaczyć? :) co to jest to parcelowanie? i jak się łączy te id i w ogóle na czym to polega?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

Udostępnij tego posta


Odnośnik do posta
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.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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).

Udostępnij tego posta


Odnośnik do posta
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.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

Udostępnij tego posta


Odnośnik do posta
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)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Tyle, że IDków ci GarbageCollector sam nie usunie, wiec dla mnie ten sposób jest wygodniejszy.

Udostępnij tego posta


Odnośnik do posta
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ść.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

Tylko 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ę tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×