Size: a a a

2020 March 16

LS

L S in learn.java
Sergei
Однако если у нашего кота чуть более сложные "правила", чем "хранить две цифры", то геттеры/сеттеры становятся бесполезны и даже вредны.
Егор Бугаенко, разлогиньтесь, пожалуйста
источник

S

Sergei in learn.java
Всё это несложно реализовать в ООП-решении, например


В варианте "с геттерами и сеттерами" наш код примерно так выглядит:

class Cat{
 float energy;
 float hunger;

 goSleep(float hours){
    energy += hours * 7;
    hunger += hours * 13;
 }

 goEat(float food) {
   energy += food * 3; // три единицы энергии с каждого кг. еды
 }

 float play(float hours) {
   if (energy >0 && hunger < 100) {
 energy -= hours * 4;
 hunger += 13;
 return hours * 1;
} else {
 return 0;
}
}
источник

K

Kotomord_λapki in learn.java
Max
Если пишешь свой пакет с классами, имеет смысл делать гет/сет методы для полей, если классы в пакете взаимодействуют друг с другом?
Да,  отлаживать будет проще
источник

K

Kotomord_λapki in learn.java
"какая сволочь это меняет" будет узнаваться при помощи одного брякпойнта
источник

S

Sergei in learn.java
Sergei
Всё это несложно реализовать в ООП-решении, например


В варианте "с геттерами и сеттерами" наш код примерно так выглядит:

class Cat{
 float energy;
 float hunger;

 goSleep(float hours){
    energy += hours * 7;
    hunger += hours * 13;
 }

 goEat(float food) {
   energy += food * 3; // три единицы энергии с каждого кг. еды
 }

 float play(float hours) {
   if (energy >0 && hunger < 100) {
 energy -= hours * 4;
 hunger += 13;
 return hours * 1;
} else {
 return 0;
}
}
Набираю с телефона, получается кривовато, но надеюсь идея ясна: наш кот так устроен, что когда он что-то "делает", меняются сразу несколько его параметров.
источник

S

Sergei in learn.java
Sergei
Всё это несложно реализовать в ООП-решении, например


В варианте "с геттерами и сеттерами" наш код примерно так выглядит:

class Cat{
 float energy;
 float hunger;

 goSleep(float hours){
    energy += hours * 7;
    hunger += hours * 13;
 }

 goEat(float food) {
   energy += food * 3; // три единицы энергии с каждого кг. еды
 }

 float play(float hours) {
   if (energy >0 && hunger < 100) {
 energy -= hours * 4;
 hunger += 13;
 return hours * 1;
} else {
 return 0;
}
}
Это всё "без геттеров".
источник

K

Kotomord_λapki in learn.java
Sergei
Набираю с телефона, получается кривовато, но надеюсь идея ясна: наш кот так устроен, что когда он что-то "делает", меняются сразу несколько его параметров.
Разнесите на CatData и Cat
источник

L

Loljeene in learn.java
Kotomord_λapki
Разнесите на CatData и Cat
+1 за отдельный котоконтроллер )
источник

DK

Dmitry Kalinichenko in learn.java
и что мы получаем ? 10 котиков с один поведением ? я так вижу по твоему коду
источник

l

lloyd in learn.java
я не понимаю почему парень так топит за отсутствие сеттеров и геттеров. так а как ты будешь получать данные по этому коту?
источник

K

Kotomord_λapki in learn.java
Но вообще такие разговоры напоминают восхваляющую котов поговорку
источник

S

Sergei in learn.java
Sergei
Всё это несложно реализовать в ООП-решении, например


В варианте "с геттерами и сеттерами" наш код примерно так выглядит:

class Cat{
 float energy;
 float hunger;

 goSleep(float hours){
    energy += hours * 7;
    hunger += hours * 13;
 }

 goEat(float food) {
   energy += food * 3; // три единицы энергии с каждого кг. еды
 }

 float play(float hours) {
   if (energy >0 && hunger < 100) {
 energy -= hours * 4;
 hunger += 13;
 return hours * 1;
} else {
 return 0;
}
}
Положим я в код теперь добавлю геттеры из своего первого примера.

Программист, который будет использовать класс, вполне заметит, что у кота есть поведение играть, и оно приводит к уменьшению энергии. И есть метод setEnergy() который очевидно эту энергию восстанавливает ("сеттер").
источник

S

Sergei in learn.java
Однако на самом деле пользоваться этим сеттером нельзя, потому как он ломает логику - в процессе восстановления энергии наш кот должен ещё и проголодаться (а этого сеттер не делает).
источник

LS

L S in learn.java
Sergei
Однако на самом деле пользоваться этим сеттером нельзя, потому как он ломает логику - в процессе восстановления энергии наш кот должен ещё и проголодаться (а этого сеттер не делает).
Ну просто не пиши сетер
источник

LS

L S in learn.java
Вот решение
источник

S

Sergei in learn.java
Sergei
Однако на самом деле пользоваться этим сеттером нельзя, потому как он ломает логику - в процессе восстановления энергии наш кот должен ещё и проголодаться (а этого сеттер не делает).
@lloyd1918 вот этот пример показывает, что сеттеры/геттеры легко сбивают с толку, и приводят к неверно работающему коду.
источник

S

Sergei in learn.java
L S
Ну просто не пиши сетер
Я как раз про это - не надо писать геттеры и сеттеры.
источник

K

Kotomord_λapki in learn.java
Sergei
Я как раз про это - не надо писать геттеры и сеттеры.
В объектах,  которые не только хранят данные
источник

ch

central hardware in learn.java
Sergei
Однако на самом деле пользоваться этим сеттером нельзя, потому как он ломает логику - в процессе восстановления энергии наш кот должен ещё и проголодаться (а этого сеттер не делает).
какого фига у вас вообще можно устанавливать уровень энергии самому это как минимум глупой
источник

S

Sergei in learn.java
lloyd
я не понимаю почему парень так топит за отсутствие сеттеров и геттеров. так а как ты будешь получать данные по этому коту?
А зачем мне "данные вообще"?
Ну то есть понятно, что в некоторых случаях мне таки надо знать что-то такое про этого кота, что у него удачно хранится в определённом поле объекта. Но мне определенно не нужен доступ ко всем вообще полям объекта.
источник