Uproszczenie kodu, 4 pola i metoda

0

W jednym z tutoriali znalazłam taki program, jak widać są w nim 4 pola i metoda która to zwraca.
Moje pytanie to czy nie można napisać takiego programu w jakiś krótszy sposób ? Bardzo nie podobają mi się te metody get i set, w szkole nic takiego nie robiliśmy.

public class Kot {

    private String imie;
    private Date dataUrodzenia;
    private Float waga;
    private String imieOpiekuna;
	
	public String przedstawSie() {
		return "Cześć, jestem "+imie+", urodziłem się "+dataUrodzenia+", ważę "+waga+", a opiekuje się mną " + imieOpiekuna;
	}

    public String getImie() {
        return imie;
    }

    public void setImie(String imie) {
        this.imie = imie;
    }

    public Date getDataUrodzenia() {
        return dataUrodzenia;
    }

    public void setDataUrodzenia(Date dataUrodzenia) {
        this.dataUrodzenia = dataUrodzenia;
    }

    public Float getWaga() {
        return waga;
    }

    public void setWaga(Float waga) {
        this.waga = waga;
    }

    public String getImieOpiekuna() {
        return imieOpiekuna;
    }

    public void setImieOpiekuna(String imieOpiekuna) {
        this.imieOpiekuna = imieOpiekuna;
    }

}
2

Z project lombok (https://projectlombok.org/features/GetterSetter.html):

class Kot {
    @Getter @Setter private String imie;
    @Getter @Setter private Date dataUrodzenia;
    @Getter @Setter private Float waga;
    @Getter @Setter private String imieOpiekuna;
}
0

a coś dla początkujących amatorów ?

1

To jest zalecany sposób, dzięki niemu w kodzie przestrzegamy zasady hermetyzacji < https://pl.wikipedia.org/wiki/Hermetyzacja_(informatyka) >.
Oczywiście, jeżeli bardzo chcesz możesz usunąć wszystkie metody, a pola ustawić na publiczne i w innej części kodu odwoływać się do pól klasy Kot w ten sposób:

Kot pies = new Kot();
pies.imie = "Kubuś";
System.out.println(pies.imie); 
1

Vanilla Java, czyli to co masz u siebie aktualnie :/
Ale zastanów się po drodze, czy na pewno potrzebujesz setterów - większość czasu zamiast tego powinnaś przyjąć wszystko w konstruktorze i zapomnieć o dalszych zmianach.

Czyli coś w rodzaju:

class Kot {
    private String imie;
    private Date dataUrodzenia;
    private float waga;
    private String imieOpiekuna;
 
    public Kot(String imie, Date dataUrodzenia, float waga, String imieOpiekuna) {
        this.imie = imie;
        this.dataUrodzenia = dataUrodzenia;
        this.waga = waga;
        this.imieOpiekuna = imieOpiekuna;
    }

    public String pobierzImie() {
        return imie;
    }

    public Date pobierzDateUrodzenia() {
        return dataUrodzenia;
    }

    public float pobierzWage() {
        return waga;
    }

    public String pobierzImieOpiekuna() {
        return imieOpiekuna;
    }
}
1

Nie podoba Ci się to, że metody są, czy to, że musisz je pisać?
Jeśli to pierwsze, to je wymaż i zmień deklaracje dostępu do pól, z private na public.
Jeśli to drugie, to każde IDE )IntelliJ, Eclipse, NetBeans) samo napisze kod tych metod.

0

Nie podoba mi się to rozwiązanie, do tej pory robiłam wszystko w pascalu i C++, tam po prostu przypisywało się do zmiennej wartość i wyświetlało na ekranie, a przynajmniej w takich prostych programach.
Teraz doczytałam, że gettery i settery pobierają i zapisują do pól klasy. Tylko skąd i gdzie.
Chciałam żeby ten program wczytał te 4 rzeczy z klawiatury i wyświetlił, ale to się nawet odpalić nie chce w eclipse

1

Najprościej to robić tylko to co jest wymagane, wersja minimalna jest taka:

import java.util.*;
import java.lang.*;
import java.io.*;

class Kot {
 
    private String imie;
    private Date dataUrodzenia;
    private Float waga;
    private String imieOpiekuna;
 
    public Kot(String imie, Date dataUrodzenia, Float waga, String imieOpiekuna) {
      this.imie = imie;
      this.dataUrodzenia = dataUrodzenia;
      this.waga = waga;
      this.imieOpiekuna = imieOpiekuna;
    }
    
    public String przedstawSie() {
        return "Cześć, jestem "+imie+", urodziłem się "+dataUrodzenia+", ważę "+waga+", a opiekuje się mną " + imieOpiekuna;
    }

    public static void main (String[] args) throws java.lang.Exception
    {
	Kot kot = new Kot("Filemon", new Date(), new Float(0.4), "Ala");
	System.out.println("Kot: " + kot.przedstawSie());
    }
}

http://ideone.com/YCMCfb

Teraz jeśli chcesz np. dodać obsługę tycia kota - możesz dodać takiego pseudo-mutatora:

    public Kot zmienWage(float nowaWaga) {
    	return new Kot(imie, dataUrodzenia, new Float(nowaWaga), imieOpiekuna);
    }

http://ideone.com/OtyTC7

Edit: robienie gettera/settera do każdego pola to popularny antywzorzec, wynikający z naturalnej chęci do wyłączania myślenia. Niestety czasami trudno się bez tego obyć.
http://www.adam-bien.com/roller/abien/entry/encapsulation_violation_with_getters_and

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