Объектно-ориентированный дизайн (серия) — инкапсуляция
Смотреть можно, но трогать нельзя! 🥵
Это касается предоставления клиенту только той информации, которую вы хотите, и в нужном вам формате.
Большинство описаний этой концепции идет вокруг линий «добавить геттеры и сеттеры на ваших полях«.
❓ Но почему это должно изменить ситуацию к лучшему?
В чем разница между этим классом с публичными полями
public class Book {
public String author;
public String title;
public Date releaseDate;
public Integer rentalsNo;
}
Book.java
и тот же класс с геттерами и сеттерами?
public class Book {
public String author;
public String title;
public Date releaseDate;
public Integer rentalsNo;
public String getAuthor() {
return this.author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getTitle() {
return this.title;
}
public void setTitle(String title) {
this.title = title;
}
public Date getReleaseDate() {
return this.releaseDate;
}
public void setReleaseDate(Date releaseDate) {
this.releaseDate = releaseDate;
}
public Integer getRentalsNo() {
return this.rentalsNo;
}
public void setRentalsNo(Integer rentalsNo) {
this.rentalsNo = rentalsNo;
}
}
❗️Абсолютно никаких! Более того, вы написали намного больше кода, который на самом деле не приносит никакой пользы.
Ваш клиент по-прежнему может получать доступ ко всем внутренним свойствам книги и изменять их либо непосредственно через свойства, либо с помощью метода.