Репозиторий содержит данные о проекте Нетбинса
http://java-ugatu.blogspot.ru/
Основы разработки приложений на Java
Уральский производственный центр АйТи – УГАТУ
Цели: 1. Освоение синтаксиса и основ ООП в Java. 2. Изучение возможностей стандартных структур данных (коллекций) 3. Освоение работы с библиотекой тестирования JUnit
Задание.
Делать можно в любой среде NetBeans (рекоменд.), Eclipse, IDEA. Обязательные требования: • отсутствие дублирование кода >2-3 строк. • осмысленные и соответствующие соглашению имена классов, методов и полей • инкапсуляция: минимум public-методов, все поля private.
- Разработать демонстрационную систему классов для моделирования систем хранения объектов.
• Основной класс – предмет (Item или аналогичное название) имеет название, вес и доп. свойства вес – не обязательно поле, у составного объекта он вычисляется доп. свойства – это HashSet - (сюда можно помещать параметры типа цвета или «плоский», «тяжелый») (абстрактный класс? интерфейс?) Пример - кирпич, 2 кг, {плоский=да} Свойства предметов неизменяемы. метод getInfo – подробная информация о предмете.
• Есть предметы-контейнеры. Они тоже являются предметами, но фактически содержат несколько предметов внутри. У всех их должен быть базовый класс (или интерфейс), позволяющий перечислить все предметы внутри (можно реализовать Iterable) • Пример – мешок. методы – добавить предмет, вытащить предмет (достаётся случайный), найти предмет по имени. У мешка есть предельный вес внутри, больше которого добавлять нельзя. Собственный вес мешка задаётся в конструкторе. Cам мешок тоже является предметом. • Другой пример – стопка. Методы те же, но добавляется всегда наверх, забирается также сверху. Вместо макс. веса – максимальное кол-во предметов.( можно сделать функцию «можно ли положить ещё?»). Вставить проверку, что в стопку можно сложить только “плоские” предметы (размерами пренебрагаем). • Коробка – как мешок, только плоская (можно складывать в стопки) Набор методов зависит от вашего опыта и фантазии, минимум перечислен. (можно ещё открыть/закрыть коробку, ….)
У всех классов должен быть переопределён toString(кратко – для отладки). 2. При превышении веса или высоты стопки выбрасывается собственное исключение (ItemStoreException?) (для обучения сделайте его проверяемым, т.е. классом-наследником Exception).
Организуйте защиту от помещения одного и того же предмета в разные коробки/стопки одновременно (флажок у предмета или ссылка на контейнер или доп. свойство «внутри чего-то» или что-то ещё). (ItemAlreadyPlacedException?)
- Проведите тестирование полученной системы (создать наборы тестов JUnit) Обязательно протестировать: создание объектов, вычисление веса, упаковка/распаковка выбрасывание исключений [@Test(expected=SomeException.class ], лучше тестировать классы сначала по отдельности, а потом вместе.
Пример сложного теста на словах: (сначала проверить операции по отдельности)
A = кирпич1, 2кг, плоский B = кирпич2, 2кг, плоский C = кирпич3, 2кг, плоский
D= новый мешок (мешок1, макс. 5 кг, сам весит 0.1кг) E= новая коробка(коробка1, макс. 10 кг, сама весит 0.5кг)
D.добавить (A) D.добавить (B)
assert (D.вес() = 4.1 кг)
E->добавить(C) assert (E.вес() = 2.5 кг)
E->добавить(D) - должно быть исключение если коробка не вмещает 2+4.1 = 6.1 кг. assert (E.вес() = 6.5 кг)
F = новая стопка F.добавить(E) // ок – коробка плоская F.добавить(С) // ок assert(F.вытащить() == С ) //F.добавить(D) - должно быть исключение
Задание
Скомпилировать и запустить лабораторную работу 1 из консоли.
(добавьте C:\Program Files\Java\jdk…\bin в PATH )
• javac -cp <где брать классы, нужные при компиляции>
< какие файлы компилировать > -d <куда помещать .class>
• java -cp <где брать классы, нужные для запуска> <полное имя класса >
• java -jar <имя jar-файла с манифестом, в котором есть Main-Class: … >
- Скомпилируйте основные классы (без тестов) одним вызовом javac
- Скомпилируйте основные классы (без тестов) в несколько шагов. Для доступа к скомпилированным классам нужно будет указать путь к скомпилированным классам (CLASSPATH)
- Запустите приложение из папки с .class-файлами
- Запакуйте приложение в Jar-файл и запустите из него через java -jar lab.jar (в заранее заготовленном файле-манифесте укажите имя главного класса и перечисление нужных библиотек, относительно jar-файла)
MANIFEST.MF:
Manifest-Version: 1.0
Main-Class: mypack.MyMainClass
Class-Path: mylibfolder/mylib1.jar mylib2.jar
5. Добавьте компиляцию тестов. В classpath придётся добавить Junit4 и Hamcrest (jar- архивы)
6. Добавьте запуск тестов в скрипт:
java -cp < где искать классы1; где искать классы2;…> org.junit.runner.JUnitCore <имя класса с тестами>
(см. ManualCompile)