###### 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. Был разработан класс объектов, описанных в индивидуальном варианте, и его методы.