###### tags: `scala`
# ЛР2
% Лабораторная работа № 2 «Введение в
объектно-ориентированное программирование на языке Scala»
% 1 марта 2023 г.
% Анна Терентьева, ИУ9-62Б
# Цель работы
Целью данной работы является изучение базовых
объектно-ориентированных возможностей языка Scala.
# Индивидуальный вариант
Элемент свободной группы с двумя образующими. Представляет
собой либо пустое слово (единица группы), либо конечное слово,
составленное из четырёх символов a, ã, b, b̃ таким образом,
что в нём a не появляется рядом с ã, а b не появляется рядом
с b̃. Операция сложения двух слов определяется как их
конкатенация с последующим сокращением пар aã, ãa, bb̃ и b̃b.
Операция взятия обратного элемента — как переворачивание слова
с одновременной заменой a на ã, ã — на a, b — на b̃ и b̃ — на b.
# Реализация и тестирование
Реализация:
```scala
object Group {
def simplify(s1: String): String = {
var s: String = s1
while (s.indexOf("ac") != -1 || s.indexOf("ca")
!= -1 || s.indexOf("bd") != -1 ||
s.indexOf("db") != -1) {
s = s.replace("ac", "")
s = s.replace("ca", "")
s = s.replace("bd", "")
s = s.replace("db", "")
}
s
}
}
class Group(s1: String) {
val value = Group.simplify(s1)
def +(s: Group) = new Group(value + s.value)
def unary_! = {
var s: String = value
s = s.reverse
s = s.replace("a", "z")
s = s.replace("c", "a")
s = s.replace("z", "c")
s = s.replace("b", "z")
s = s.replace("d", "b")
s = s.replace("z", "d")
new Group(s)
}
}
```
Тестирование:
```scala
val elem = new Group("bacdaca") // a
println(elem.value)
val elem2 = new Group("cbaa")
val newElem = elem + elem2 // a + cbaa -> acbaa -> baa
println(newElem.value)
val newElem2 = !newElem // baa -> aab -> ccd
println(newElem2.value)
```
```scala
a
baa
ccd
```
# Вывод
В ходе выполнения лабораторной работы были изучены базовые
объектно-ориентированные возможности языка Scala.
Был разработан класс объектов, описанных в индивидуальном варианте, и его методы.