Скачиваний:
9
Добавлен:
09.04.2023
Размер:
36.12 Кб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,

СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»

(СПбГУТ)

Факультет Инфокоммуникационных сетей и систем

Кафедра Защищенных систем связи

Дисциплина Разработка защищенного программного обеспечения

ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №6

Обобщенное программирование

(тема отчета)

Направление/специальность подготовки

10.03.01 Информационная безопасность

(код и наименование направления/специальности)

Студент:

(Ф.И.О., № группы) (подпись)

Преподаватель:

Цветков А.Ю.

(Ф.И.О) (подпись)

Цель лабораторной работы

  1. Получить представление об основных принципах обобщенного программирования.

Используемое программное обеспечение

  1. JDK 1.5 и выше.

  2. Интегрированная среда разработки на Java.

Задание на лабораторную работу

  1. Написать реализацию для интерфейса основной задачи, rzp.generics.stack.Stack

  2. Написать реализацию для интерфейса дополнительной задачи, rzp.generics.stack.StackExtra

  3. Собрать исполняемый 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

Соседние файлы в предмете Разработка защищенного программного обеспечения