Skip to content

airazb/javaugatu_lab1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

javaugatu_lab1

Репозиторий содержит данные о проекте Нетбинса
http://java-ugatu.blogspot.ru/
Основы разработки приложений на Java
Уральский производственный центр АйТи – УГАТУ

Лабораторная работа №1


Лабораторная работа №4 (описание в конце документа)

Цели: 1. Освоение синтаксиса и основ ООП в Java. 2. Изучение возможностей стандартных структур данных (коллекций) 3. Освоение работы с библиотекой тестирования JUnit

Задание.

Делать можно в любой среде NetBeans (рекоменд.), Eclipse, IDEA. Обязательные требования: • отсутствие дублирование кода >2-3 строк. • осмысленные и соответствующие соглашению имена классов, методов и полей • инкапсуляция: минимум public-методов, все поля private.

  1. Разработать демонстрационную систему классов для моделирования систем хранения объектов.

• Основной класс – предмет (Item или аналогичное название) имеет название, вес и доп. свойства вес – не обязательно поле, у составного объекта он вычисляется доп. свойства – это HashSet - (сюда можно помещать параметры типа цвета или «плоский», «тяжелый») (абстрактный класс? интерфейс?) Пример - кирпич, 2 кг, {плоский=да} Свойства предметов неизменяемы. метод getInfo – подробная информация о предмете.

• Есть предметы-контейнеры. Они тоже являются предметами, но фактически содержат несколько предметов внутри. У всех их должен быть базовый класс (или интерфейс), позволяющий перечислить все предметы внутри (можно реализовать Iterable) • Пример – мешок. методы – добавить предмет, вытащить предмет (достаётся случайный), найти предмет по имени. У мешка есть предельный вес внутри, больше которого добавлять нельзя. Собственный вес мешка задаётся в конструкторе. Cам мешок тоже является предметом. • Другой пример – стопка. Методы те же, но добавляется всегда наверх, забирается также сверху. Вместо макс. веса – максимальное кол-во предметов.( можно сделать функцию «можно ли положить ещё?»). Вставить проверку, что в стопку можно сложить только “плоские” предметы (размерами пренебрагаем). • Коробка – как мешок, только плоская (можно складывать в стопки) Набор методов зависит от вашего опыта и фантазии, минимум перечислен. (можно ещё открыть/закрыть коробку, ….)

У всех классов должен быть переопределён toString(кратко – для отладки). 2. При превышении веса или высоты стопки выбрасывается собственное исключение (ItemStoreException?) (для обучения сделайте его проверяемым, т.е. классом-наследником Exception).

Организуйте защиту от помещения одного и того же предмета в разные коробки/стопки одновременно (флажок у предмета или ссылка на контейнер или доп. свойство «внутри чего-то» или что-то ещё). (ItemAlreadyPlacedException?)

  1. Проведите тестирование полученной системы (создать наборы тестов 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) - должно быть исключение


Лабораторная работа №4 (описание в конце документа)

Цель: Компиляция и запуск программы из консоли (со сторонними jar-файлами)

Задание Скомпилировать и запустить лабораторную работу 1 из консоли. (добавьте C:\Program Files\Java\jdk…\bin в PATH ) • javac -cp <где брать классы, нужные при компиляции>
< какие файлы компилировать > -d <куда помещать .class> • java -cp <где брать классы, нужные для запуска> <полное имя класса > • java -jar <имя jar-файла с манифестом, в котором есть Main-Class: … >

  1. Скомпилируйте основные классы (без тестов) одним вызовом javac
  2. Скомпилируйте основные классы (без тестов) в несколько шагов. Для доступа к скомпилированным классам нужно будет указать путь к скомпилированным классам (CLASSPATH)
  3. Запустите приложение из папки с .class-файлами
  4. Запакуйте приложение в 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)