ITMO-Study-Note

MainPage/Program/lab2

Лабораторная работа #2

На основе базового класса Pokemon написать свои классы для заданных видов покемонов. Каждый вид покемона должен иметь один или два типа и стандартные базовые характеристики:

Атака должна иметь стандартные тип, силу (power) и точность (accuracy). Должны быть реализованы стандартные эффекты атаки. Назначить каждому виду покемонов атаки в соответствии с вариантом. Уровень покемона выбирается минимально необходимым для всех реализованных атак.

Используя класс симуляции боя Battle, создать 2 команды покемонов (каждый покемон должен иметь имя) и запустить бой.

Базовые классы и симулятор сражения находятся в jar-архиве (обновлен 9.10.2018, исправлен баг с добавлением атак и кодировкой). Документация в формате javadoc - здесь.

Информацию о покемонах, цепочках эволюции и атаках можно найти на сайтах http://poke-universe.ru, http://pokemondb.net, http://veekun.com/dex/pokemon

Комментарии

Цель работы: на простом примере разобраться с основными концепциями ООП и научиться использовать их в программах.

Что надо сделать (краткое описание)

  1. Ознакомиться с документацией, обращая особое внимание на классы Pokemon и Move. При дальнейшем выполнении лабораторной работы читать документацию еще несколько раз.
  2. Скачать файл Pokemon.jar. Его необходимо будет использовать как для компиляции, так и для запуска программы. Распаковывать его не надо! Нужно научиться подключать внешние jar-файлы к своей программе.
  3. Написать минимально работающую программу и посмотреть как она работает. Battle b = new Battle(); Pokemon p1 = new Pokemon(“Чужой”, 1); Pokemon p2 = new Pokemon(“Хищник”, 1); b.addAlly(p1); b.addFoe(p2); b.go();
  4. Создать один из классов покемонов для своего варианта. Класс должен наследоваться от базового класса Pokemon. В конструкторе нужно будет задать типы покемона и его базовые характеристики. После этого попробуйте добавить покемона в сражение.
  5. Создать один из классов атак для своего варианта (лучше всего начать с физической или специальной атаки). Класс должен наследоваться от класса PhysicalMove или SpecialMove. В конструкторе нужно будет задать тип атаки, ее силу и точность. После этого добавить атаку покемону и проверить ее действие в сражении. Не забудьте переопределить метод describe, чтобы выводилось нужное сообщение.
  6. Если действие атаки отличается от стандартного, например, покемон не промахивается, либо атакующий покемон также получает повреждение, то в классе атаки нужно дополнительно переопределить соответствующие методы (см. документацию). При реализации атак, которые меняют статус покемона (наследники StatusMove), скорее всего придется разобраться с классом Effect. Он позволяет на один или несколько ходов изменить состояние покемона или модификатор его базовых характеристик.
  7. Доделать все необходимые атаки и всех покемонов, распределить покемонов по командам, запустить сражение.

Отчёт по работе должен содержать:

  1. Текст задания.
  2. Диаграмма классов реализованной объектной модели.
  3. Исходный код программы.
  4. Результат работы программы.
  5. Выводы по работе.

    Вопросы к защите лабораторной работы:

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

  11. Модификаторы final и static.修饰符final和static. Модификатор static указывает на то, что метод является статическим и может быть вызван без создания объекта экземпляра класса.Члены с ключевым словом static принадлежат классу, а не конкретным объектам.Мы можем помечать наши переменные, методы и классы как final.если мы не можем:изменить наши конечные переменные, расширять наши конечные классы, переопределить наши конечные методы.Присвоение значения только один раз в программной операции.
  12. Пакеты, инструкция import.包装、说明书import。 в Java классы объединяются в пакеты. Пакеты позволяют организовать классы логически в наборы.
    Чтобы указать, что класс принадлежит определенному пакету, надо использовать директиву package, после которой указывается имя пакета:
    Оператор import используется для импорта ссылки на значение, экспортированное из внешнего модуля.