Файл: Разработка мобильных приложений отчет.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.01.2024

Просмотров: 25

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение

высшего образования
ИРКУТСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ

ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ


Институт информационных технологий и анализа данных

наименование института



ОТЧЁТ

К лабораторной работе №2 по дисциплине:

Разработка мобильных приложений



Выполнил студент группы:



















шифр группы




подпись




Фамилия И.О.

Проверил:



















должность




подпись




Фамилия И.О.



Иркутск 2023 г.

Задание

  1. Cоциальная сеть

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

Для написания кода лучше всего использовать паттерн «наблюдатель». Паттерн Наблюдатель (Observer) позволяет определить зависимость типа "один-ко-многим" между объектами, таким образом, что при изменении состояния одного объекта все зависящие от него объекты будут уведомлены об этом и автоматически обновятся.


В данном коде класс Subject определяет интерфейс для наблюдаемого объекта, а класс Observer определяет интерфейс наблюдателя. Класс User является наблюдаемым объектом, а класс Follower наблюдателем. User реализует методы наблюдательного объекта removeObserver(Observer), registerObserver(Observer), addPost(Post) и notifyObserver(Post). Follower же реализует метод update(Post). Класс Post необходим для содержания количества лайков пользователей.



Рисунок 1 – UML диаграмма

Результат работы программы



Рисунок 2 – Результат работы программы

Листинг программы

interface Subject {

fun registerObserver(observer: Observer)

fun removeObserver(observer: Observer)

fun notifyObservers(post: Post)

}

interface Observer {

fun update(post: Post)

}

class User(val userName: String) : Subject {

private val followers = mutableListOf()

private val posts = mutableListOf
()

override fun registerObserver(observer: Observer) {

followers.add(observer)

}

override fun removeObserver(observer: Observer) {

followers.remove(observer)

}

override fun notifyObservers(post: Post) {

followers.forEach { it.update(post) }

}

fun addPost(post: Post) {

posts.add(post)

notifyObservers(post)

}

}

class Follower(private val followerName: String) : Observer {

override fun update(post: Post) {

println("$followerName: ${post.author} выложил новый пост: '${post.text}'. лайков: ${post.likes}")

}

}

class Post(val author: String, val text: String, val likes: Int) {

}

fun main() {

val user1 = User("Дима")

val user2 = User("Данил")

val user3 = User("Женя")

val user4 = User("Никита")

val follower1 = Follower("Дима")

val follower2 = Follower("Данил")

val follower3 = Follower("Женя")

val follower4 = Follower("Никита")

user1.registerObserver(follower2)

user1.registerObserver(follower3)

user2.registerObserver(follower1)

user2.registerObserver(follower2)

user2.registerObserver(follower3)

user3.registerObserver(follower4)

user4.registerObserver(follower2)

user4.registerObserver(follower3)

println("Информация о постах пользователей: \n")

println("--------------------------------------------------------------------------------")

val user1Post1 = Post(user1.userName, "Первый пост от Димы", 5)

user1.addPost(user1Post1)

println("--------------------------------------------------------------------------------")

val user1Post2 = Post(user1.userName, "Второй пост от Димы", 7)

user1.addPost(user1Post2)

println("--------------------------------------------------------------------------------")

val user2Post1 = Post(user2.userName, "Первый пост от Данила",6)

user2.addPost(user2Post1)

println("--------------------------------------------------------------------------------")

val user3Post1 = Post(user3.userName, "Первый пост от Жени", 3)

user3.addPost(user3Post1)

println("--------------------------------------------------------------------------------")

val user4Post1 = Post(user4.userName, "Первый пост от Никиты", 13)

user4.addPost(user4Post1)

println("--------------------------------------------------------------------------------")

}

Заключение

В ходе данной лабораторной работе мы изучили основы разработки на языке Kotlin с использованием паттернов проектирования. Был реализован паттерн «Наблюдатель».