report_lab6
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,
СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
Факультет Инфокоммуникационных сетей и систем
Кафедра Защищенных систем связи
Дисциплина Разработка защищенного программного обеспечения
ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №6
Обобщенное программирование
(тема отчета)
Направление/специальность подготовки
10.03.01 Информационная безопасность
(код и наименование направления/специальности)
Студент:
(Ф.И.О., № группы) (подпись)
Преподаватель:
Цветков А.Ю.
(Ф.И.О) (подпись)
Цель лабораторной работы
Получить представление об основных принципах обобщенного программирования.
Используемое программное обеспечение
JDK 1.5 и выше.
Интегрированная среда разработки на Java.
Задание на лабораторную работу
Написать реализацию для интерфейса основной задачи, rzp.generics.stack.Stack
Написать реализацию для интерфейса дополнительной задачи, rzp.generics.stack.StackExtra
Собрать исполняемый jar и отправить на проверку.
Основное задание:
package rzp.generics.stack;
public interface Stack<T> {
/**
* Инициализирует стек
* @param maxSize максимальное количество элементов в стеке
* @throws StackException при повторной инициализации (и не выполняет её)
*/
void init(int maxSize) throws StackException;
/**
* @return пуст ли стек
*/
boolean isEmpty();
/**
* @return заполнен ли стек
*/
boolean isFull();
/**
* @return размер стека
*/
int size();
/**
* @param item элемент
* @return содержится ли элемент в стеке
*/
boolean contains(T item);
/**
* Возвращает элемент с вершины стека
* @return элемент с вершины стека
* @throws StackException если стек пуст
*/
T peek() throws StackException;
/**
* Удаляет элемент с вершины стека и возвращает его
* @return элемент с вершины стека
* @throws StackException если стек пуст
*/
T pop() throws StackException;
/**
* Добавляет элемент в вершину стека
* @param item элемент
* @throws StackException если стек уже переполнен
*/
void push(T item) throws StackException;
}
Листинг программного кода основного задания
import java.util.ArrayList;
import java.util.List;
public class Main<T extends Comparable<T>> implements rzp.generics.stack.Stack<T>{
public static void main(String[] args){}
public boolean isinit = false;
public int maxsize;
private List<T> Stack = new ArrayList<T>();
private int top = -1;
public void init(int maxSize) throws rzp.generics.stack.StackException{
if (!isinit){
this.isinit = true;
this.maxsize = maxSize;
}else{
throw new rzp.generics.stack.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(T item){
return Stack.contains(item);
}
public T peek() throws rzp.generics.stack.StackException{
if (isEmpty()){
throw new rzp.generics.stack.StackException("Stack is empty.");
} else{
return Stack.get(top);
}
}
public T pop() throws rzp.generics.stack.StackException{
if (isEmpty()){
throw new rzp.generics.stack.StackException("Stack is empty.");
} else{
T item = Stack.get(top);
Stack.remove(top);
this.top--;
return item;
}
}
public void push(T item) throws rzp.generics.stack.StackException{
if (isFull()){
throw new rzp.generics.stack.StackException("Stack is full.");
}else{
this.top++;
Stack.add(item);
}
}
}
Вариант дополнительного задания
package rzp.generics.stack;
/**
* Исключение, которое нужно выбрасывать в некоторых ситуациях
* при реализации методов стека
*/
public class StackException extends Exception {
public StackException() {
super();
}
public StackException(String message) {
super(message);
}
public StackException(String message, Throwable cause) {
super(message, cause);
}
public StackException(Throwable cause) {
super(cause);
}
protected StackException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
Листинг программного кода дополнительного задания
import rzp.generics.stack.StackException;
public class Dop<T extends Comparable<T>> extends Main<T> implements rzp.generics.stack.StackExtra<T>{
public static void main(String[] args){}
public void push(T[] 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]);
}
}
}
}
}
Вывод
Были получено понимание основных принципов обобщенного программирования и их особенностей в Java.
Санкт-Петербург
2021