Лабораторная работа #2
На основе базового класса Pokemon написать свои классы для заданных видов покемонов. Каждый вид покемона должен иметь один или два типа и стандартные базовые характеристики:
- очки здоровья (HP)
- атака (attack)
- защита (defense)
- специальная атака (special attack)
- специальная защита (special defense)
- скорость (speed)
Классы покемонов должны наследоваться в соответствии с цепочкой эволюции покемонов. На основе базовых классов PhysicalMove, SpecialMove и StatusMove реализовать свои классы для заданных видов атак.
Атака должна иметь стандартные тип, силу (power) и точность (accuracy). Должны быть реализованы стандартные эффекты атаки. Назначить каждому виду покемонов атаки в соответствии с вариантом. Уровень покемона выбирается минимально необходимым для всех реализованных атак.
Используя класс симуляции боя Battle, создать 2 команды покемонов (каждый покемон должен иметь имя) и запустить бой.
Базовые классы и симулятор сражения находятся в jar-архиве (обновлен 9.10.2018, исправлен баг с добавлением атак и кодировкой). Документация в формате javadoc - здесь.
Информацию о покемонах, цепочках эволюции и атаках можно найти на сайтах http://poke-universe.ru, http://pokemondb.net, http://veekun.com/dex/pokemon
Комментарии
Цель работы: на простом примере разобраться с основными концепциями ООП и научиться использовать их в программах.
Что надо сделать (краткое описание)
- Ознакомиться с документацией, обращая особое внимание на классы Pokemon и Move. При дальнейшем выполнении лабораторной работы читать документацию еще несколько раз.
- Скачать файл Pokemon.jar. Его необходимо будет использовать как для компиляции, так и для запуска программы. Распаковывать его не надо! Нужно научиться подключать внешние jar-файлы к своей программе.
- Написать минимально работающую программу и посмотреть как она работает.
Battle b = new Battle();
Pokemon p1 = new Pokemon(“Чужой”, 1);
Pokemon p2 = new Pokemon(“Хищник”, 1);
b.addAlly(p1);
b.addFoe(p2);
b.go();
- Создать один из классов покемонов для своего варианта. Класс должен наследоваться от базового класса Pokemon. В конструкторе нужно будет задать типы покемона и его базовые характеристики. После этого попробуйте добавить покемона в сражение.
- Создать один из классов атак для своего варианта (лучше всего начать с физической или специальной атаки). Класс должен наследоваться от класса PhysicalMove или SpecialMove. В конструкторе нужно будет задать тип атаки, ее силу и точность. После этого добавить атаку покемону и проверить ее действие в сражении. Не забудьте переопределить метод describe, чтобы выводилось нужное сообщение.
- Если действие атаки отличается от стандартного, например, покемон не промахивается, либо атакующий покемон также получает повреждение, то в классе атаки нужно дополнительно переопределить соответствующие методы (см. документацию). При реализации атак, которые меняют статус покемона (наследники StatusMove), скорее всего придется разобраться с классом Effect. Он позволяет на один или несколько ходов изменить состояние покемона или модификатор его базовых характеристик.
- Доделать все необходимые атаки и всех покемонов, распределить покемонов по командам, запустить сражение.

Отчёт по работе должен содержать:
- Текст задания.
- Диаграмма классов реализованной объектной модели.
- Исходный код программы.
- Результат работы программы.
- Выводы по работе.
Вопросы к защите лабораторной работы:
- Объектно-ориентированное программирование. Основные понятия: объекты, наследование, полиморфизм, инкапсуляция.面向对象编程。基本概念:对象、继承、多态、封装。 Инкапсуляция - это механизм сокрытия данных. Мы достигаем инкапсуляции, делая наши свойства частными и предоставляя общедоступные методы получения и установки. Наследование - это способность одного класса наследовать свойства другого. Можно сказать, что это своего рода отношения “родитель-ребенок” между классами. Java поддерживает только одиночное наследование.Полиморфизм - Это способность объекта принимать различные формы.Это достигается в основном за счет перегрузки методов и их переписывания.(override and overload)
- Понятие класса. Классы и объекты в Java.类的概念。 Java 中的类和对象。
Основным строительным блоком программы на Java является класс, который, в свою очередь, включает свойства и методы.Объекты - Экземпляры классов с состоянием и поведением.
- Члены класса. Модификаторы доступа.类的成员。访问修饰符。
Функции и переменные, объявленные внутри объявления класса, становятся членами этого класса.
default: может использоваться для классов. Доступ только в конкретном пакете (package), в котором объявлен класс, метод, переменная, конструктор.
private: используется для методов, полей и конструкторов. Уровень доступа — только класс, внутри которого он объявлен.
public: используется и для классов. Полноценный доступ во всем приложении.
protected: такой же доступ, как и package-private + для тех классов, которые наследуются от класса с модификатором protected.
- Создание и инициализация объектов. Вызов методов.对象的创建和初始化。调用方法。
Сначала определите переменную, затем выделите память для объекта с помощью ключевого слова
new
и верните ссылку на объект.Конструктор вызывается при создании объекта и инициализирует его свойства
Чтобы вызвать метод объекта, используйте имя объекта, за которым следует оператор “точка”, и имя метода.
-
Области видимости переменных.变量作用域。
Локальная область видимости局部变量область, в которой переменная доступна только внутри определенного блока кода (например, внутри функции или метода).
Глобальная область видимости全局变量это область, в которой переменная доступна для всего кода, включая функции и методы.
Область видимости экземпляра实例变量 Область видимости экземпляра (или атрибуты объекта) включает переменные, объявленные внутри класса, но вне любых методов.
Статическая область видимости静态变量 Эти переменные принадлежат классу, а не конкретному экземпляру.
- Модификаторы final и static.修饰符final和static.
Модификатор
static
указывает на то, что метод является статическим и может быть вызван без создания объекта экземпляра класса.Члены с ключевым словом static
принадлежат классу, а не конкретным объектам.Мы можем помечать наши переменные, методы и классы как final
.если мы не можем:изменить наши конечные переменные, расширять наши конечные классы, переопределить наши конечные методы.Присвоение значения только один раз в программной операции.
- Пакеты, инструкция import.包装、说明书import。
в Java классы объединяются в пакеты. Пакеты позволяют организовать классы логически в наборы.
Чтобы указать, что класс принадлежит определенному пакету, надо использовать директиву package, после которой указывается имя пакета:
Оператор import
используется для импорта ссылки на значение, экспортированное из внешнего модуля.