Poprawne łączenie ze sobą klas

0

Cześć, ostatnio zaczęło mi się wszystko mieszać i w tym wątku chciałbym wyklarowac informacje o asocjacji, agregacji i kompozycji. Ogólnie o łączeniu klas. Na początek jeszcze pytanie poboczne, czy zezwolone jest aby tworzyć w większości klas aplikacji była metoda main?
No i, w jaki sposób mogę połączyć 2 klasy, tak aby jedna mogła korzystać z drugiej i na odwrót? Czy jest to poprawne, aby tworzyć obiekt klasy A w klasach B, C i D tylko dlatego ze chce użyć metod klasy A? Jaki jest najlepszy sposób, aby klasy B, C i D miały dostęp do tylko jednego obiektu klasy A? Tak aby nie tworzyć niepotrzebnie nowych obiektów, nie używać do tego Singletona. Chodzi mi o taką najlepsza praktykę. Bo na odwal to umiem haha

0

Każda klasa może mieć metodę main. Tylko metoda o sygnaturze

public static void main(String[] args)

klasy startowej wywoływana jest automatycznie. Podstawowe sposoby łączenia klas:
//Obiekt klasy B jest tworzony w klasie A
class B{
A a = null;
public B(A a){
this.a = a;
}
}
class A{
B b = null;
public A(){
b = new A(this);
}
}
//obiekty klas A i B tworzone są w klasie M
class M{
public M(){
A a = new A();
B b = new B(a);
a.setB(b);
}
}
class B{
A a = null;
public B(A a){
this.a = a;
}
}
class A{
B b = null;
public set(B b){
this.b = b;
}
}

0

Ok. A jeżeli w kilku klasach będzie metoda main o tej sygnaturze?
Tak może być?
Pierwszy przykład który opisałeś. Klasa B to przykład agregacji a klasa A kompozycji?
W drugim teztez jest i agregacja i kompozycja.
Wczoraj czytałem i o tym i o tym, tylko nie za bardzo rozumiem pojęcia właściciela (owner), o co chodzi ze agregacja nie posiada ownera a kompozycja tak? Mam nadzieje ze dobrze zapamiętałem

0

Każda klasa może mieć metodę main. Tylko metoda o sygnaturze
public static void main(String[] args)
klasy startowej wywoływana jest automatycznie.

Każda klasa może mieć dowolną ilość metod main o dowolnych sygnaturach.
Ja bym uznał, że w obu przypadkach jest kompozycja. Ale mogę się mylić, rozróżnianie kompozycji od agregacji zupełnie mnie nie pasjonuje.

0

Nie za bardzo rozumiem. Nie jest to ważna kwestia, która decyduje o poprawności zaimplrmrntowanrgo kodu w niektórych przypadkach? No bo chyba ma to znaczenie, że po usunięciu jednego obiektu, drugi usuwany jest lub nie jest razem z nim.

0

Nie jest to ważna kwestia, która decyduje o poprawności zaimplementowanego kodu w niektórych przypadkach? No bo chyba ma to znaczenie, że po usunięciu jednego obiektu, drugi usuwany jest lub nie jest razem z nim.

W Javie obiekt może zostać usunięty, gdy nie będzie już on dostępny (nie będziesz posiadał do niego referencji). Nie jest to zależne od tego, czy przekazujesz ten obiekt przez metodę czy konstruktor. Podobnie kompozycja i agregacja nie tym się różnią. Nie da się tego ustalić na tych dwóch klasach, potrzebny Ci jest konkretny przykład.

0

A czym?

0

A czym?

https://books.google.pl/books?id=nHZslSr1gJAC&pg=PA67&lpg=PA67&source=bl&ots=V87UFXOD7E&sig=-3XUF5Qgcx-cQs6GFytYVBtPT2A&hl=pl&sa=X&ved=0ahUKEwiJgp-S8-PMAhXhDpoKHayFAEcQ6AEIHzAA#v=onepage&q&f=false
Implementacja nie jest tak ważna. Użycie konstruktora i settera daje w zasadzie ten sam rezultat, ważne jest jak to wygląda kontekście tego programu. Zresztą rozróżnienie kompozycji i agregacji raczej nie jest ścisłe i jednoznaczne.

0

Ok, bo chyba trochę nie o to mi chodziło. W gruncie rzeczy chodzi mi o bałagan jaki mam w aplikacji. Robiłem ją jak leciało bez planowania klas itp. Doprowadziło to do tego, że po wylogowaniu się z jednego konta i próby zalogowania na drugie cały czas były dane z tego pierwszego (wartość portfela). I pomyślałem, że to przez to, że nie wszystkie obiekty się usunęły. Zrobiłem to ręcznie, i działało, ale wiedziałem, że tak jak to zrobiłem się nie robi, i stąd moje pytania o kompozycje itp.W załączniku UML apki. Jak widać mam bardzo dużo metod main (public static void main(String[] args)),tak chyba też być nie powinno.
Przyszło mi do głowy jeszcze jedno pytanie. Raczej nie używa się jednej klasy (np. Test), w której inicjalizuje się obiekty? Raczej jest to tylko używane do testowania części kodu tak?
Bo do tego co napisał bogdans potrzebna jest chyba właśnie oddzielna klasa , w której Tworzone byłyby obiekty. Ale nie wiem w jaki sposób miałoby to działać, bo w takiej klasie Test jeszcze "sztywny scenariusz wywoływania metod, a klient działałby inaczej.
Sory za głupie pytania, ale tak jak mówiłem trochę się w tym pogubiłem i chce sobie rozjaśnić trochę zreczy, na które wcześniej nie zwracałem uwagi albo olewałem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1