Description
# Домашнее задание №4 (курс Scala, Naumen)
Необходимо реализовать класс простой электронной таблицы (класс Table).
<br><br>
Таблица имеет фиксированную ширину и длину (параметры конструктора Table).
<br>
<br>Таблица должна быть представлена следующими типами ячеек (базовый интерфейс Cell):
<br> -Пустая ячейка (класс EmptyCell),
<br> -Ячейка с 32-битным целым числом (класс NumberCell),
<br> -Ячейка с текстом (класс StringCell),
<br> -Ячейка, содержащая ссылку на другую ячейку (класс ReferenceCell).
<br>
<br>По умолчанию, все ячейки таблицы являются пустыми (класс “EmptyCell”)
<br>
<br>Таблица (класс Table) должна предоставлять следующие общедоступные методы:
<br> -getCell(ix: Int, iy: Int): Option\[Cell\] (возвращает ячейку по индексам строки и столбца,
<br> либо “None”, если ix или iy вне границ таблицы),
<br> -setCell(ix: Int, iy: Int, cell: Cell): Unit (устанавливает ячейку cell в указанные столбец и строку),
<br> здесь ix – индекс колонки (ix>=0), iy – индекс строки (iy>=0),
<br> cell – ячейка таблицы, представленная конкретной реализацией (EmptyCell/NumberCell/StringCell/ReferenceCell).
<br>
<br>Таблица хранит коллекцию ячеек. Так как определён метод “setCell”, можно использовать мутабельную коллекцию
<br>(package scala.collection.mutable).
<br>
<br>Каждая ячейка должна предоставлять основной конструктор, посредством которого инициализируется значение ячейки.
<br>Например, class NumberCell(number: Int) extends Cell .
<br>В случае “EmptyCell” какого-либо конструктора не требуется.
<br>В случае “ReferenceCell”: class ReferenceCell(ix: Int, iy: Int, table: Table) extends Cell, где ix и iy –
<br>индексы столбца и строки ячейки (на которую ведёт ссылка) таблицы table (которой принадлежит ячейка, на которую ведёт ссылка).
<br>
<br>Каждая ячейка (реализация интерфейса Cell) должна предоставлять общедоступный метод toString(): String,
<br>который возвращает хранящееся в ней значение в виде строки (типа String).
<br>В случае “EmptyCell” метод “toString” должен возвращать значение “empty”
<br>В случае “ReferenceCell” метод “toString” должен возвращать значение той ячейки, на которую определена ссылка.
<br>В случае, если “ReferenceCell” ячейка ссылается на индекс ячейки, находящийся за границами таблицы, метод “toString”
<br>должен возвращать значение “outOfRange”
<br>В случае “циклических” ссылок (если, например, “ReferenceCell” ячейка ссылается на другую “ReferenceCell” ячейку,
<br>которая вновь ссылается на первую), метод “toString” должен возвращать значение “cyclic”.
<br>
<br>При реализации можно учесть, что двумерный список можно однозначно выразить одномерным:
<br> i = ix + iy * w,
<br>где i – индекс одномерного списка, ix – индекс колонки двумерного списка, iy – индекс строки двумерного списка,
<br>w – ширина (количество колонок) двумерного списка.
<br>
<br>Необходимо, чтобы реализация успешно проходила юнит-тесты <a href=’https://github.com/naumen-student/naumen.scala.course.2021.spring/tree/master/homeworks/homework_4/src/test/scala’>(src/test/scala/Test.scala)</a>
Reviews
There are no reviews yet.