| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Волк и Корова |
| Автор: Prol 22.1.2008, 23:16 | ||||||
| Коллеги, помогите новичку понять, как это сделать? Волк и Корова наблюдают друг за другом, Волк гонится за Коровой и догоняет её. У меня не получается чтоб оно хотя бы откомпилилось, более того, я не понимаю, где что вызвать :о((( Помогите старому больному пролу понять Observer
|
| Автор: anglerhood 23.1.2008, 03:25 | ||||||
| Prol, В паттерне "наблюдатель" есть два класса объектов: объект одного класса(Наблюдатель/Observer) следит и реагирует на изменения объекта второго класса(Наблюдаемый/Obsrevable). Как Observer узнает, что Observable изменился? А очень просто, Observable сам уведомляет о своем изменении Observera. Получив такое уводмление Observer обновляет свое состояние в соответствии с изменениям Observable. В учебных целях рекомендую реализовать этот паттерн без java.util В случае с коровой и волком, каждый из классов является наблюдателем и наблюдаемым. Жизненный цикл получается такой: волк изменяет свое положение волк уведомляет о своем изменении корову корова изменяет свое положение корова уведомляет волка о своем изменении волка цикл В методе update каждый клас должен изменять свое состояние, то есть Volk должен вызывать setDognat, а Korova - setUbegat. Ну и кто-то должен из них первым начать изменение. В общем вот тебе рассказ от очевидца про корову и волка
|
| Автор: Prol 23.1.2008, 08:58 | ||||||||||
Вопросы: - Что вы называете "паттерном"? Добавлено через 2 минуты и 21 секунду
- Цикла нету в вашем коде, скорей какая-то рекурсия хитрая :о))) Добавлено через 5 минут и 52 секунды
- Какой смысл в применении @Override ? Я ведь не перекрываю никакой метод в суперклассе... Добавлено через 9 минут и 49 секунд
Компилер вот такое выдаёт: The method setDogonat() in the type Volk is not applicable for the arguments (Korova) |
| Автор: tux 23.1.2008, 09:22 |
Паттерном называется паттерн, он же шаблон проектирования, ни что более. Prol, а что вы собственно хотите понять? Вам понятие жизненного цикла в принципе не знакомо? Добавлено через 5 минут и 18 секунд Про паттерны можно почитать здесь - http://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F, если есть желание. |
| Автор: Prol 23.1.2008, 09:33 | ||||||||||
То есть "паттерн" - это интерфейс (набор процедур проектирования и правил пользования ими) Спасибо. Добавлено через 4 минуты и 58 секунд
Вот мой код. Мне непонятно следующее: - он не хочет компилится, компилятор выдаёт The method setDogonat() in the type Volk is not applicable for the arguments (Korova) - мне непонятно как его остановить, если он вдруг заработает :о)))
|
| Автор: Prol 23.1.2008, 16:05 |
| Хлопцы, у кого-нибудь получилось скомпилить мой код последний вариант? А то я смотрю много просматривают тему, и молчат загадочно... |
| Автор: Prol 23.1.2008, 17:25 |
| ыыы... Вот за ето я себя ненавижу. Напишу код, он работает, почему работает, я сам непонимаю :о((( У меня он не компилится и я не понимаю, почему он у вас останавливается именно когда волк поймал корову :о))) |
| Автор: anglerhood 23.1.2008, 20:26 | ||||||
Prol,
Как раз перегружается метод класса http://java.sun.com/j2se/1.4.2/docs/api/java/util/Observer.html Я думаю, что основаная проблема с пониманием этого кода у тебя связана с тем, что ты пользуешься классами из java.util. Реализуй этот паттерн полностью сам и все станет намного понятнее.
Эмоции тут излишни, протрейси построчно и много станет понятным. Ты скопировал код класса VolkIKorova с моим указанием пакета ru.forum.vingrad. У остальных классов такой же пакет указал? Рекомендую полносьтю скопировать мой код, расставить брейкпоинты и протрейсить его. Смотри в методе setDogonat:
|
| Автор: Prol 24.1.2008, 01:36 | ||||||
Какой смысл указывать @override если и без этой инструкции работает? Добавлено через 2 минуты и 14 секунд
У меня в коде никаких винградов нету, если ты почитаешь мой код :о) Добавлено через 5 минут и 23 секунды Скомпилилось :о))) Я убрал из проекта кучу тренировочных классов и скомпилилось :о))) Добавлено через 7 минут и 1 секунду Вобщем понял, в дефаулт пакаже не может быть двух майнов :о) |
| Автор: Kangaroo 24.1.2008, 01:48 | ||
Смысл этой инструкции: 1) Код будет читальбенее, сразу видно что этот метод перекрыт 2) Дополнительное указание компилятору. Если вы поставите @override на методе, который не перекрыт - будет ошибка компиляции Код работает ) Я просто скопировал, разве что импорты еклипс добавил. |
| Автор: Prol 24.1.2008, 02:33 | ||||
Вот универсальный класс Mobile получился.
Пример использования
Прога завершает работу, потому что когда корова попалась, то волк не делает notifyObservers() Я правильно понял? |
| Автор: Prol 24.1.2008, 08:02 |
| Спасибо за помощь :о) |
| Автор: Kangaroo 24.1.2008, 10:37 | ||
Ну да. |