Какой метод работоспособнее, чтобы снабжать ссылками стоимость?

Я хотел бы знать, который из этих методов работоспособнее. Эти методы - внутри того же класса Rectangulo2.

  1. Первая форма используя методы getter:

    public boolean puntoCorrectos(){
         return getPuntoAX() == getPuntoBX() && getPuntoCX() == getPuntoDX() && 
                getPuntoAY() == getPuntoDY() && getPuntoCY() == getPuntoBY();
    }
    
  2. Вторая форма используя прямые переменные

    public boolean puntosCorrecto(){
        return puntoAX == puntoBX && puntoCX == puntoDX && puntoAY == puntoDY &&
                puntoCY == puntoBY;
    }
    
  3. Третья форма используя ссылку

    public boolean puntossCorrectos(Rectangulo2 r){
        return r.puntoAX == r.puntoBX && r.puntoCX == r.puntoDX && r.puntoAY == r.puntoDY &&
                r.puntoCY == r.puntoBY;
    }
    
2
задан 31.10.2016, 09:25
3 ответа

Ответ: завись.

Первый выбор самый подходящий, если он что твой класс Rectangulo2 позволь иметь субклассы, и что они смогли sobreescribir методы get. Это, первая форма позволяет использование абстракции и полиморфизма, вещи, которая они не позволяют второй и третий выбор.

Второй выбор самый подходящий, если он что твой класс Rectangulo2 он не позволяет субклассы, или если он состоит в том, что утверждение должно быть на прямой стоимости больше, чем в getters. В особенности, это осуществление проще чтения для других программистов вместо первой, но силы, в которую, если какой-то класс дочь хотела изменить это поведение, у него было бы, что sobreescribir метод полностью.

Третий выбор самый подходящий, если это был статический метод и, предпочтения, он был определен в утилитарном классе (обычно известная как полезный или helper). Так, ты мог бы звонить в метод Rectangulo2#puntossCorrectos без необходимости иметь инстанцию класса, чтобы это призывать, но да ты нуждался бы в одной или больше инстанций, чтобы сходить за аргумент в метод. Преимущество, у которого был бы метод, будучи разработан, как статический он состоит в том, что ты можешь делать утверждение недействительного. Покажись смешным, но эта линия склонная к NPE:

r.puntoCorrecto();

Потому что r смоги быть недействительным. Конечно ты можешь добавлять утверждение перед этим, или ты мог бы забывать добавить этот if там и только добавлять это в твоем статическом осуществлении:

public static boolean puntossCorrectos(Rectangulo2 r){
    return r != null && r.puntoAX == r.puntoBX && r.puntoCX == r.puntoDX && r.puntoAY == r.puntoDY &&
        r.puntoCY == r.puntoBY;
}
3
ответ дан 24.11.2019, 12:52

Все будет зависеть от формы, в которой явятся связанными классы в твоей модели. Например да он посредством связи использования, правильным был бы метод 3, так как класс больше ничто не получает объект, он делает то, что он желает, и уже нужно притворяться незнающим вышеупомянутого объекта.

В твоем случае, поскольку все методы - внутри того же класса, правильным был бы номер два, так как да ты используешь номер один, ты делал бы очередь вызовов методов. Число один был бы правильным да стоимость находится в другом классе, так как ты выполняешь начало encapsulación.

В конце концов лучше, чтобы ты не использовал this, это не очень нужно (я знаю, что это отдельные технологии, но с Визуальной Версии Studio 2015, он помещает как рекомендация снимать this, для упрощения кода и продолжая начало программирования KISS (Keep it simply, stupid) Поддерживать это простым и глупым), одинокий this должен быть использованным, когда в методе будет заявление переменной, которая приносила бы по имени тот же самый к человеку, имеющему отношение к признаку класса пример:

public class MiClase{
  private int varCompar;

  public bool Comparar(int varCompar)
  {
    return this.variable == variable;
  }
}

Чтобы понимать больше ты можешь искать на, дружи в POO, Начало KISS Программирование и Начала POO

0
ответ дан 24.11.2019, 12:52

Я думаю, что мы соглашаемся, что третий выбор не имеет смысл в случае этого класса в особенности, так как не имеет смысл происходить this как параметр в функцию.

Между первой и вторым выбором, интуитивно вторая имеет больше чувство.

Но, ты не подумал, что второй выбор обязательно будет являться более работоспособным, чем первая. На практике, JIT способен анализировать первый выбор и удалять простые методы как getPuntoAX() и заменять их прямыми доступами к переменным, действительно преобразовывая код во что-то, что похоже на твой второй выбор.

Итак, если ты принимаешь решение использовать this. напротив переменных или нет, это вопрос стиля больше ничто, и у него нет никакого попадания в эффективности кода.

0
ответ дан 24.11.2019, 12:52

Теги

Похожие вопросы