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

### Задание 1. Модификация классов

Добавьте модификаторы доступа к членам классов, разработанных в лабораторной работе 2 (классы `TimeSpan`, `BankAccount` и `Student`).

{% hint style="warning" %}
Подумайте над тем, какие члены класса сделать приватными, а какие публичными
{% endhint %}

### Задание 2. Создание UML-диаграмм

Для модифицированных классов из второй лабораторной работы нарисуйте диаграммы классов UML.

### Задание 3. Класс IntStack

Необходимо создать класс `IntStack`, который реализует функционал **стека целых чисел** с помощью статического массива.

{% hint style="danger" %}
Нарисуйте класс в диаграмме классов UML
{% endhint %}

При реализации стека учитывайте следующее:

* при реализации класса вам необходимо указать область видимости для полей и методов. Подумайте о том, какие методы необходимо отнести к "интерфейсу", а какие к реализации;
* размер стека для внешнего пользователя не имеет значения и теоретически неограничен;
* внешний пользователь не должен знать и догадываться, что стек "внутри" реализован с помощью обычного статического массива;
* вы должны написать "реализацию" класса таким образом, чтобы можно моделировать динамическое поведение стека с помощью обычного статического массива;
* продумайте, какие аргументы методы должны принимать и какие значения возвращать.

{% tabs %}
{% tab title="Читать внимательно!" %}
**Перейдите во вкладку "Подсказка", чтобы получить подсказку, которая поможет вам в реализации класса или попробуйте реализовать класс без подсказки.**
{% endtab %}

{% tab title="Подсказка" %}

* При создании объекта стека инициализируйте внутренний статический массив с каким-то изначальным размером;
* При вставке элементов проверяйте, не выходите ли вы за пределы внутреннего статического массива;
* Если внутренний массив переполнен, создавайте новый массив б**о**льшего размера: создавайте новый массив, копируйте значения из старого массива в новый, заменяйте новый массив на старый. Помните, что массивы в Java - объекты и что поле - просто указатель на массив и что указатель может указывать на другой массив;
* При уменьшении размера стека реализуйте уменьшение внутреннего статического массива. Подумайте, как это лучше сделать, чтобы не уменьшать внутренний массив при каждом удалении элемента из стека.
  {% endtab %}
  {% endtabs %}

{% hint style="warning" %}
**ВАЖНО! Стек необходимо реализовать с помощью статического целочисленного массива!**

**НЕ ИСПОЛЬЗУЙТЕ КОЛЛЕКЦИИ И ПОТОКИ ДАННЫХ, ТОЛЬКО МАССИВЫ**
{% endhint %}

Для внешнего пользователя класса, поведение класса выглядит следующим образом:

* пользователь может создать новый стек с конструктором без параметров;
* пользователю доступна команда `pop()` для извлечения элемента из стека. Метод `pop()` возвращает извлеченный элемент. При попытке извлечь из пустого стека, метод возвращает `0` или выбрасывает исключение (реализуйте выброс исключения, если вы знаете, как это делать и что такое исключение);
* пользователю доступна команда `push()`, которая добавляет элемент в стек;
* пользователю доступна команда `peek()` для просмотра элемента на вершине стека без его исключения.
* пользователь может получить значение количества элементов в стеке с помощью метода `size()`;
* пользователь может проверить, пустой ли стек с помощью метода `isEmpty()`;
* пользователь может очистить стек полностью с помощью метода `clear()`.

### Задание 4. Создание класса по UML-диаграмме

Создайте Java-классы исходя из диаграммы, представленной ниже. Код методов реализовывать не нужно, только заголовки и общую структуру классов.

![](/files/-MjfHDZm8b-0FL4a2SCr)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://opu.gitbook.io/oop/first-term/labs/laboratornaya-rabota-3/zadanie-na-laboratornuyu-rabotu.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
