Tworzenie zmiennych w klasie

0

Cześć!
Zwracam się do Was z zapytaniem odnośnie tworzenia zmiennych w klasach. Często na filmach widzę, że ktoś chcąc stworzyć zmienne np. które odnosiłyby się do zmiennej monitor zapisuje je tak :

private Monitor monitor; - jaka jest różnica między takim zapisem, a zapisem na przykład takim: private String monitor

Z góry dziękuje za jakieś racjonalne wytłumaczenie :)

2

private Monitor monitor to przykład agregacji.

Agregacja występuje wtedy, gdy jakaś klasa posiada pole innej klasy - między klasami zachodzi relacja "ma / posiada".
Poniżej podrzucam Ci przykład, gdzie można powiedzieć, że "Osoba posiada adres".

class Address {
    String city;
    String street;
    String homeNumber; //example 10
    String apartament; //example 14D

    Address(String city, String street, String homeNumber, String apartament) {
        this.city = city;
        this.street = street;
        this.homeNumber = homeNumber;
        this.apartament = apartament;
    }
}


class Person {
    String firstName;
    String lastName;
    Address address;

    Person(String firstName, String lastName, Address address) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.address = address;
    }
}

Czyli w Twoim przypadku private Monitor monitor mogłby się znaleźć w klasie Komputer, która by ten monitor posiadała. :)

0

Czyli w metodzie testowej otrzymujemy przykładowo to co poniżej:

class AddressBook {
    public static void main(String[] args) {
        Address address = new Address("Warszawa", "Jedności Narodowej", "28", "17");
        Person person = new Person("Jan", "Nowak", address);
        System.out.println(person.firstName + " " + person.lastName);
        System.out.println("Mieszka pod adresem:");
        System.out.println(person.address.city + ", " + person.address.street + ", " + person.address.homeNumber + ", " + person.address.apartament);
    }
}
2

private Monitor monitor; - jaka jest różnica między takim zapisem, a zapisem na przykład takim: private String monitor

To troche dziwne pytanie. Różnica to zupełnie inny typ danych. To tak jakbyś pytał czym się różni int od Stringa albo od List<Integer>. Te typy danych przechowują zupełnie inne dane. Jak chcesz zapisać nazwisko to raczej nie użyjesz do tego int, podobnie jesli potrzebujesz w programie listę liczb. Możesz mi pokazać jak chciałbyś listę liczb przechowywać w zmiennej typu int? ;)

1
JavaAmateur napisał(a):

Często na filmach widzę, że

I to jest problem. Widzę, nawet czasem odtwarzam, ale nie rozumiem.

Weź książkę

0

Zarówno String jak i Monitor są to pewne klasy, pewne typy danych. Na ich podstawie tworzysz te zmienne o które pytasz, które są obiektami tych klas.
Dla przykładu, jeśli masz klasę Pies i klasę Kot, to będzie różnica jeśli utworzysz:
private Pies puszek
a
private Kot puszek
Obiekt puszek pierwszej klasy tj. Pies będzie na przykład szczekał, a obiekt puszek klasy Kot będzie na przykład miałczał.

4
JavaAmateur napisał(a):

private Monitor monitor; - jaka jest różnica między takim zapisem, a zapisem na przykład takim: private String monitor

Dziwie się że nikt tego jeszcze tego nie napisał, ale drugi przypadek to choroba zwana stringozą. Wynika ona z tego że teoretycznie każdą informację możesz trzymać jako string więc nie potrzebujesz innych typów. Jednak ja używasz typów innych niż String możesz mieć inteligentny konstruktor czy jak totam się nazywa w OOP. CHodzi o to że nawet jak masz głupi tym Monitor to możesz dodać walidację w konstruktorze lub metodzie statycznej tworzącej obiekt:

class Monitor {
  private String name

  public Monitor(String name) {
    Preconditions.checkArgument(name != null && 3 < name.length && name.length < 666, "Name '" + name + "'' is wrong name");
    this name = name;
  }

  public static Either<String, Monitor> createMonitorEither(String name) {
    return (name != null && 3 < name.length && name.length < 666)
      ? Either.right(new Monitor(name))
      : Either.left("Name '" + name + "'' is wrong name");
  }
}

Oczywiście są też inne zalety. np to że nie pomylimy szafy z kiblem.

Jeśli mamy metodę

public Room createRoom(String szafa, String kibel)

to można się pomylić i wywołać ją:

createRoom(kibel, szafa);

Jesli jednak mamy typy:

public Room createRoom(Szafa szafa, Kibel kibel)

to pomyłka będzie skutkować błędem kompilacji

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