2012-04-13 3 views
0

я в настоящее время работаю над следующими вопросами, как пересмотр:Создание методов и тестирование класса в Java

VolumeModel сохраняет данные для объекта управления громкостью. Объем имеет уровень, и его также можно включить в состояние приглушенности.

(Ниже Ниже то, что рисуется в UML диаграмме :)

VolumeModel - Название класса

приглушен: INT - Атрибут

Уровень: int - Атрибут

+ .. методы .. - Методы класса

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

Как мой ответ на этот вопрос я написал, как это:

public VolumeModel() 
public VolumeModel(boolean muted, int level) 
public void setLevel(int level) 
public int getLevel() 
public setMuted(boolean muted) 
public boolean isMuted() 
public void turnUp() 
public void turnUp(int level) 
public String toString() 
public boolean equals(VolumeModel V) 

Я не знаю, если это весь ожидаемый метод заголовки, в том числе конструкторов, которые, как ожидается, будет рассматриваться в этом классе из-за следующий вопрос (что связанно с выше вопросом) под:

б) Используя метод вы объявленный в части (а), написать код для тестовой программы в:

  • создать экземпляр объемной модели ...
  • с уровнем громкости 1 и не приглушенные:
  • в цикле, постоянно увеличивать громкость до уровня 10:
  • затем отключите звук;
  • окончательно вывести состояние объема модели объекта

Как мой ответ на этот вопрос выше до сих пор, я сделал это:

VolumeModel vml = new VolumeModel(); 
vml.setLevel(1); 
vml.setMuted(false); 

VolumeModel volumelevel = new VolumeModel(true, 11); 
while (!vml.equals(volumelevel) 
{ 
//to be completed 
} 

Этот кусок кода выше, не является закончил, поскольку я борюсь за это, поэтому, если есть какие-то советы, которые кто-то может мне дать, я был бы признателен.

Кроме того, любые предложения и отзывы по моему следующему ответу на вопрос а) также помогут.

Заранее спасибо.

ps - Я не могу попробовать этот код на своем программном обеспечении eclipse, потому что по какой-то причине мое программное обеспечение eclipse не работает на моем ноутбуке, однако, когда я нахожу время, чтобы пойти в мои компьютерные лаборатории, тогда я увижу, могу ли я проверьте код на программном обеспечении eclipse на своих компьютерах.

+1

Я предлагаю вам протестировать код, который действительно работает, и если вы найдете ошибку, выполните код в своем отладчике, чтобы увидеть, что он не делает, что вы ожидаете. Я бы прокомментировал, что вы, кажется, не используете все методы, которые вы определяете в a) в вашем коде в b). –

+0

@Peter Lawrey - Спасибо за ваш комментарий. Я не согласен с вами, как только я получу компьютерную лабораторию на следующей неделе, я проверю ее правильно, но сейчас я могу только теоретически ответить на эти вопросы. – user1279780

+1

В этом случае я могу только ответить на ваши теоретические потребности. ;) Я бы предположил, что ваши методы в (a) должны быть только тем, что вы используете в (b). –

ответ

1

Вам не нужно создавать новый том VolumeModel для тестирования. Вам также не нужен метод equals.

Вместо того чтобы делать цикл в то время как попробовать это:

for(i=2;i<11;i++){ 
    vml.turnUp(); //provided that turnUp sets the volume up a level 
} 
vml.setMuted(true); 

На этом этапе вы должны указать, как вы хотите вывести состояние объекта. Вместо того, чтобы пытаться переописать ToString, как это кажется, что вы делаете, вы можете создать свой собственный outputState() таким образом

public void outputState(VolumeModel v) 

Возвращаемый тип является недействительным, потому что вы можете просто поставить ряд System.out или какую бы систему вы ни выбрали.

Надеюсь, это поможет.

2

Некоторые замечания:

  • вы забыли объявить тип возвращаемого setMuted()
  • нет никакого Javadoc. Хотя большинство методов очевидны, что делает turnUp(int level), например? Является ли аргумент новым уровнем (в этом случае он делает то же самое, что и setLevel()), или это приращение? Каково состояние объекта при построении с помощью конструктора no-arg?
  • если equals() переопределяется, то hashCode() также должен быть. Контракт состоит в том, что равные объекты ДОЛЖНЫ иметь один и тот же хэш-код. Кроме того, метод equals должен принимать аргумент Object. Вы можете реализовать метод equals(VolumeModel), но помните, что тогда вы не переопределили метод Object.equals(), и поэтому этот метод никогда не будет вызываться классами коллекции.
  • Причудливо иметь turnUp методов, но нет turnDown.
  • Причудливо не иметь ограничений (хотя в вопросе не задано).

И, наконец, ваш фрагмент не выполняет задание. Он должен:

  • создать уникальный VolumeModel экземпляр, с объемом равным 1, а не приглушенный
  • вызова turnUp() в петле 9 итераций
  • немого его по телефону setMuted(true)
  • вызова getLevel() и isMuted() и убедитесь, что значения: 10 и true соответственно. Вопрос не требует, чтобы вы выполняли равные значения и проверяли равенство между двумя экземплярами VolumeModel.
+1

Я бы добавил, что вы должны иметь 'equals (Object)', а не 'equals (VolumeModel)' –

+0

Да, действительно, я пропустил это. Я отредактирую свой ответ. –

+0

Благодарим вас за комментарии, мое предположение состояло в том, что turnUp (int level) увеличивает громкость, и setLevel() будет устанавливать уровень до уровня 10 (возможно, я ошибаюсь здесь), потому что вопрос (b) требует только тома до уровня 10. – user1279780

Смежные вопросы