report_lab5
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,
СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
Факультет Инфокоммуникационных сетей и систем
Кафедра Защищенных систем связи
Дисциплина Разработка защищенного программного обеспечения
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №5
Обработка исключений
(тема отчета)
Направление/специальность подготовки
10.03.01 Информационная безопасность
(код и наименование направления/специальности)
Студент:
(Ф.И.О., № группы) (подпись)
Преподаватель:
Цветков А.Ю.
(Ф.И.О) (подпись)
Цель лабораторной работы
Освоить механизмы обработки исключений в Java
Используемое программное обеспечение
JDK 1.5 и выше.
Интегрированная среда разработки на Java.
Задание на лабораторную работу
Написать реализацию для интерфейса основной задачи, rzp.exceptions.stack.Stack
Написать реализацию для интерфейса дополнительной задачи, rzp.exceptions.stack.StackExtra
Собрать исполняемый jar и отправить на проверку.
Основное задание:
package rzp.exceptions.stack;
public interface Stack {
/**
* Инициализирует стек
* @param maxSize максимальное количество элементов в стеке
* @throws StackException при повторной инициализации (и не выполняет её)
*/
void init(int maxSize) throws StackException;
/**
* @return пуст ли стек
*/
boolean isEmpty();
/**
* @return заполнен ли стек
*/
boolean isFull();
/**
* @return размер стека
*/
int size();
/**
* @param item элемент
* @return содержится ли элемент в стеке
*/
boolean contains(int item);
/**
* Возвращает элемент с вершины стека
* @return элемент с вершины стека
* @throws StackException если стек пуст
*/
int peek() throws StackException;
/**
* Удаляет элемент с вершины стека и возвращает его
* @return элемент с вершины стека
* @throws StackException если стек пуст
*/
int pop() throws StackException;
/**
* Добавляет элемент в вершину стека
* @param item элемент
* @throws StackException если стек уже переполнен
*/
void push(int item) throws StackException;
}
Листинг программного кода основного задания
import rzp.exceptions.stack.StackException;
import java.util.ArrayList;
public class Main implements rzp.exceptions.stack.Stack{
public static void main(String[] args){}
public boolean isinit = false;
public int maxsize;
private ArrayList<Integer> stack = new ArrayList<>();
private int top = -1;
public void init(int maxSize) throws StackException{
if (!isinit){
this.isinit = true;
this.maxsize = maxSize;
}else{
throw new StackException("Stack was already initialised.");
}
}
public boolean isEmpty(){
return (top == -1);
}
public boolean isFull(){
return (top + 1 == maxsize);
}
public int size(){
return (top + 1);
}
public boolean contains(int item){
return stack.contains(item);
}
public int peek() throws StackException{
if (isEmpty()){
throw new StackException("Stack is empty.");
} else{
return stack.get(top);
}
}
public int pop() throws StackException{
if (isEmpty()){
throw new StackException("Stack is empty.");
} else{
int tmp = stack.get(top);
stack.remove(top);
this.top--;
return tmp;
}
}
public void push(int item) throws StackException{
if (isFull()){
throw new StackException("Stack is full.");
}else{
this.top++;
stack.add(item);
}
}
}
Вариант дополнительного задания
package rzp.exceptions.stack;
public interface StackExtra extends Stack {
/**
* Добавляет все указанные элементы в вершину стека по очереди
* @param items элементы
* @throws StackException если элементов больше, чем свободного места в стеке
* (элементы при этом не добавлять в стек!)
* @throws IllegalStateException если стек ещё не был инициализирован {@link Stack#init(int)}
* (элементы при этом не добавлять в стек!)
*/
void push(int... items) throws StackException, IllegalStateException;
}
Листинг программного кода дополнительного задания
import rzp.exceptions.stack.StackException;
public class Dop extends Main implements rzp.exceptions.stack.StackExtra{
public static void main(String[] args){}
public void push(int... items) throws StackException, IllegalStateException{
if (!isinit){
throw new IllegalStateException("Stack was not initialised yet.");
}else{
if (items.length > maxsize - size()){
throw new StackException("Too much elements.");
}else{
for (int i = 0; i < items.length - 1; i++){
push(items[i]);
}
}
}
}
}
Вывод
Были получены навыки работы с классом Exception, с обработкой исключений, а также изучены стандартные типы исключений в Java.
Санкт-Петербург
2021