---
# System prepended metadata

title: ЛР2
tags: [scala]

---

###### tags: `scala`
# ЛР2
% Лабораторная работа № 2 «Введение в 
объектно-ориентированное программирование на языке Scala»
% 1 марта 2023 г.
% Анна Терентьева, ИУ9-62Б

# Цель работы
Целью данной работы является изучение базовых 
объектно-ориентированных возможностей языка Scala.

# Индивидуальный вариант
Элемент свободной группы с двумя образующими. Представляет 
собой либо пустое слово (единица группы), либо конечное слово,
составленное из четырёх символов a, ã, b, b̃ таким образом, 
что в нём a не появляется рядом с ã, а b не появляется рядом 
с b̃. Операция сложения двух слов определяется как их 
конкатенация с последующим сокращением пар aã, ãa, bb̃ и b̃b. 
Операция взятия обратного элемента — как переворачивание слова
с одновременной заменой a на ã, 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. 
Был разработан класс объектов, описанных в индивидуальном варианте, и его методы.