Извлечение атрибутов из методов - PullRequest
0 голосов
/ 01 мая 2018

Поскольку я новичок в Java, у меня много вопросов. Для моего университета я должен запрограммировать приложение для фитнеса. У нас есть несколько советов, но большая часть кода будет создана нами. Формулировка задач немного мягкая, и поэтому у меня есть некоторые проблемы в решении задач. Но сейчас я хочу показать вам, что я должен делать. Я должен настроить класс "Фитнес-оборудование" с этими атрибутами:

  1. имя
  2. тип
  3. тренированная мышечная группа (другой класс)
  4. max.trainingduration
  5. сожженных калорий в час

Помимо этих атрибутов, я должен реализовать несколько методов:

  1. Конструктор
  2. int калорийность (в минутах) -> возвращает расход калорий за одну тренировку в данный момент времени (в минутах)
  3. int калорийное потребление (в часах, int минутах) -> возвращает расход калорий за одну тренировку в данное время (часы и минуты)
  4. логические поддержки (String мышца) -> возвращает true, если оборудование поддерживает мышцу
  5. логическая поддержка (Musclegroup мышечная группа) -> возвращает true, если оборудование поддерживает мышечную группу
  6. boolean needspower () -> возвращает true, если оборудованию требуется питание.

Я создал такой класс:

public class Fitness-Equipment {

    private String name;
    private String type;
    private Musclegroupe mousclegroupe;
    private int max.trainingduration;
    private int burnedcaloriesperhour;
    boolean power;

    public Fitness-Equipment(String name, String type, Musclegroupe mousclegroupe, int max.trainingduration, int burnedcaloriesperhour) {
        this.name = name;
        this.type = type;
        this.mousclegroupe = mousclegroupe;
        this.max.trainingduration = max.trainingduration;
        this.burnedcaloriesperhour = burnedcaloriesperhour;
    }

    //Setter & Getter for all attributes above//

    public int calorieconsumption (int trainingduration) {
        return (burnedcaloriesperhour =  trainingduration * (burnedcaloriesperhour / 60));
    }

    public boolean supports (String muscle) {
        return (muskelgroupe.contains(muscle));
    }

    public boolean supports (Musclegroupe musclegroupe) {
        return (this.musclegroupe.equals(musclegroupe));
    }

    public boolean needspower () {
        return (power = true);
    }

}

Это правильно, как я это реализовал? Иногда я не уверен, должен ли я добавить некоторые атрибуты в мой класс или методы будут делать это для меня. Самая большая проблема в том, что задачи не очень хорошо сформулированы, и поэтому я очень не уверен в их решении. И извините за мой английский, это не мой родной язык, и код был написан на немецком языке, поэтому мне пришлось перевести его: D

1 Ответ

0 голосов
/ 01 мая 2018

Если я правильно понимаю ваш вопрос, то скажу, что вы на правильном пути. (Но, пожалуйста, см. Ниже некоторые отзывы о вашем коде.)

атрибуты предназначены для вещей, в которых значение данных имеет значение для природы объекта

методы предназначены для вещей, в которых операция / алгоритм / логика имеет значение для природы объекта

Атрибуты имеют смысл только после того, как им присвоено определенное значение, как правило, во время создания объекта. (Но это значение, безусловно, может изменяться в течение времени жизни экземпляра объекта.) Методы полностью определены до создания объекта (т. Е. Они определены для класса) и не изменяются. (Хотя их точные результаты и эффекты, конечно, могут варьироваться в зависимости от различных входных данных.)

Итак, используя ваш класс в качестве примера, что-то вроде burnedcaloriesperhour подходит в качестве атрибута, поскольку оно является частью того, что определяет определенный элемент фитнес-оборудования, и что-то вроде calorieconsumption() подходит в качестве метода, потому что логика для расчета, которая неизменна и одинакова для всех единиц оборудования для фитнеса.

В этом много нюансов. Некоторые атрибуты быстро меняются; некоторые атрибуты не определены при создании объекта и принимают значение только после вызова того или иного метода; класс константы подобны атрибутам, но имеют одинаковое значение для всех объектов этого класса; и многое, многое другое. Но часть вашего изучения Java будет приобретать постоянно расширяющийся концептуальный контекст для понимания этих нюансов.

Я хочу отметить несколько вещей о вашем коде:

  1. Я не думаю, что max.trainingduration; будет работать так, как я думаю, вы этого хотите. Там написано «атрибут« trainingduration », который принадлежит объекту с именем« max ». Я думаю, вы хотите maxTrainingduration или что-то в этом роде.

  2. Код return (power = true); будет (а) устанавливать power равным true, а (b) всегда возвращать true. Я думаю, что вы имеете в виду return (power == true);

  3. Код return (burnedcaloriesperhour = trainingduration * (burnedcaloriesperhour / 60)); изменяет значение burnedcaloriesperhour каждый раз, когда он вызывается; я думаю, что вы хотите просто вернуть расчет trainingduration * (burnedcaloriesperhour / 60).

  4. Мне неясно, является ли ваш комментарий к коду //Setter & Getter for all attributes above// заменой для методов установки и получения, которые не показаны, или если он предназначен для определения методов ниже, как методов установки и получения. Если это заменитель методов не показан, это нормально. Если это комментарий о методах ниже, я хочу отметить, что они на самом деле не являются методами установки и получения.

Надеюсь, я ответил на ваш вопрос и дал вам некоторую уверенность для продвижения вперед. Лучший способ обрести уверенность и углубить понимание - это экспериментировать. Начать с малого; compile-run-fix, пока у вас что-то не работает сделать небольшие постепенные улучшения; добавить выходные строки, чтобы увидеть, что происходит и где это происходит; найдите время, чтобы опробовать сценарии «что если»; и повторять этот цикл снова и снова. Вы получите твердое представление о структуре классов, а также о роли атрибутов и методов.

Виль Эрфолг!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...