0 / 0 / 0
Регистрация: 04.12.2014
Сообщений: 38
1

Связь объектов классов

09.03.2019, 11:18. Показов 1751. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день господа. Нужна помощь гуру Возник вопрос реализации связи объектов классов, насколько логично использование связи многие ко многим? Ибо говорят, что необходимо уходить от нее в сторону связи один ко многим. Хотелось бы услышать мнение и посмотреть примеры реализации от опытных людей. Сам пока не могу понять как это все работает.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.03.2019, 11:18
Ответы с готовыми решениями:

Разработать иерархию классов, демонстрирующее работу с коллекцией объектов разных классов
Задание: Разработать в соответствии с индивидуальным заданием иерархию классов и приложение,...

Преобразования объектов классов в объекты других классов
Задача типа обмен валют. Нужно конвертировать старый фунт стерлинг(фунт, шиллинг и пенсы) в доллары...

Связь классов и методов
Помогите понять в чём проблема,в классе TTopic создал метод типа другого класса,а компилятор на это...

Композиция классов и объектов
Помогите, пожалуйста, разобраться с самим заданием. -В первой части предлагается использовать...

13
872 / 459 / 90
Регистрация: 10.06.2014
Сообщений: 2,665
09.03.2019, 11:39 2
Цитата Сообщение от Дмитрий962 Посмотреть сообщение
Ибо говорят, что необходимо уходить от нее в сторону связи один ко многим
Зависит от ситуации. Где то достаточно связи один ко многим, а где то многие ко многим. Яркий тому пример - реляционные базы данных и ORM.

Короче говоря, нужно проектировать связи исходя из необходимости а не потому что кто-то где-то написал...
А что бы понимать необходимость нужна практика...
1
0 / 0 / 0
Регистрация: 04.12.2014
Сообщений: 38
09.03.2019, 11:44  [ТС] 3
Ну допустим, остановимся на связи один ко многим. Не затруднит вас привести пример кода?
0
"C with Classes"
1644 / 1401 / 523
Регистрация: 16.08.2014
Сообщений: 5,877
Записей в блоге: 1
09.03.2019, 11:47 4
Дмитрий962, я думаю тут надо так думать. Если можно сделать связь один ко многим то не нужно делать связи многие ко многим ибо связей больше, сложность выше, ошибок больше, как итог тоска на душе
1
872 / 459 / 90
Регистрация: 10.06.2014
Сообщений: 2,665
09.03.2019, 12:15 5
Цитата Сообщение от Дмитрий962 Посмотреть сообщение
Ну допустим, остановимся на связи один ко многим. Не затруднит вас привести пример кода?
Например этот форум.
У каждого поста может быть много комментариев, но у комментария не бывает много постов.
Вот пример кода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <string>
#include <vector>
 
class Comment
{
public:
    Comment(const std::string &author, const std::string &content) 
        : m_author(author), m_content(content) {}
 
private:
    std::string m_author;
    std::string m_content;
    
    friend std::ostream &operator << (std::ostream &os, const Comment &comment)
    {
        std::cout << "Author: " << comment.m_author << '\n';
        std::cout << "Content: " << comment.m_content << '\n';
        
        return os;
    }
};
 
class Post
{
public:
    Post(const std::string &author, const std::string &title, const std::string &content)
        : m_author(author), m_title(title), m_content(content)
    {
    }
    
    void addComment(const Comment &comment)
    {
        m_comments.push_back(comment);
    }
private:
    std::string m_author;
    std::string m_title;
    std::string m_content;
    std::vector<Comment> m_comments;
    
    friend std::ostream &operator << (std::ostream &os, const Post &post)
    {
        std::cout << "=========POST=========\n";
        std::cout << "Author: " << post.m_author << '\n';
        std::cout << "Title: " << post.m_title << '\n';
        std::cout << "Content: " << post.m_content << '\n';
        std::cout << "=========POST END=========\n\n";
        
        std::cout << "=========POST COMMENTS=========\n";
        for (const Comment &comment : post.m_comments)
        {
            std::cout << comment;
            std::cout << "-=--=-=-=-=-=-=-=-=-=-\n";
        }
        std::cout << "=========POST COMMENTS END=========\n";
        
        return os;
    }
};
 
int main()
{
    Post post("Mike", "Post title", "Some question");
    post.addComment(Comment("John", "Comment1"));
    post.addComment(Comment("Vasya", "Comment2"));
    std::cout << post;
}
1
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
09.03.2019, 13:18 6
Цитата Сообщение от Дмитрий962 Посмотреть сообщение
что необходимо уходить от нее в сторону связи один ко многим.
Паттерн Mediator?
1
0 / 0 / 0
Регистрация: 04.12.2014
Сообщений: 38
10.03.2019, 13:12  [ТС] 7
Для двух классов понятно, а как для трех реализовать? На этапе проектирования завис совсем. В конечном итоге должно получиться 3 класса, у каждого класса будет массив объектов. Каждому объекту 1 класса будет принадлежать N объектов 2 класса, а, в свою очередь, каждому объекту 2 класса будет принадлежать N объектов 3 класса.
0
"C with Classes"
1644 / 1401 / 523
Регистрация: 16.08.2014
Сообщений: 5,877
Записей в блоге: 1
10.03.2019, 15:13 8
Дмитрий962, задача ка звучит?
0
0 / 0 / 0
Регистрация: 04.12.2014
Сообщений: 38
10.03.2019, 16:37  [ТС] 9
Цитата Сообщение от _stanislav Посмотреть сообщение
Дмитрий962, задача ка звучит?
Приложение дополненной реальности, но это пока не суть. Добавляем объекты, не важно что за объекты, пусть пока имеют только имя. Для созданных объектов добавляем объекты типа маркер, каждому маркеру соответственно будут принадлежать так же объекты, текстовые метки. Для конкретного объекта пробегаемся по принадлежащим ему маркерам и как только находим нужный, получаем текстовые метки(можно просто вывести в консольки для начала)
0
0 / 0 / 0
Регистрация: 04.12.2014
Сообщений: 38
11.03.2019, 12:32  [ТС] 10
Цитата Сообщение от Дмитрий962 Посмотреть сообщение
Для двух классов понятно, а как для трех реализовать? На этапе проектирования завис совсем. В конечном итоге должно получиться 3 класса, у каждого класса будет массив объектов. Каждому объекту 1 класса будет принадлежать N объектов 2 класса, а, в свою очередь, каждому объекту 2 класса будет принадлежать N объектов 3 класса.
Добрые люди, помогите кто-нибудь такую структуру реализовать
0
"C with Classes"
1644 / 1401 / 523
Регистрация: 16.08.2014
Сообщений: 5,877
Записей в блоге: 1
11.03.2019, 12:44 11
Дмитрий962, я не понял суть вопроса или суть проблемы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <vector>
 
class C
{
    
};
 
class B
{
    std::vector<C> value;
};
 
class A
{
    std::vector<B> value;
};
1
Комп_Оратор)
Эксперт по математике/физике
8948 / 4702 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
11.03.2019, 16:15 12
Лучший ответ Сообщение было отмечено Дмитрий962 как решение

Решение

Дмитрий962, у вас задатки будущего архитектора. Не зная предметной области в которой строится модель, не понимая как можно объяснить хотя бы то, что кажется понятным и, наконец, не изучив объектных возможностей языка, вы уже решили, что будут три уровня. Это поведение типичного архитектора, - создать базовый класс и кучку наследников, а потом пытаться натянуть всё это на предмет конкретной задачи...
Дмитрий962, для начала посмотрите на самый нижний (глубоко вложенный) - третий уровень. Напишите методы которые он должен реализовывать. Они покажут контекст, который требуется упаковать инкапсулировать для обеспечения работы этой группы методов. Потом посмотрите, как будут группироваться объекты и их поведение и вы напишете методы и получите контекст 2-го уровня. После этого - уровень всей задачи в котором работают объекты второго уровня.
Может оказаться, что на каком-то этапе, нужно корректировать уже спроектированные уровни. Даже наверняка окажется. Может статься, что нужны ещё один или несколько уровней в различных ветвях полученного графа. Решение вопроса об отношениях типа наследование, композиция и т.п., это вопрос опыта и удачи. И тоже может пересматриваться в разработке и дальнейшей жизни. Это нормально.
Но тогда, вы сможете задавать вопросы в терминах локальных к конкретным узлам. Вам и тем кого вы спрашиваете будет возможно найти общие точки для общения.
1
"C with Classes"
1644 / 1401 / 523
Регистрация: 16.08.2014
Сообщений: 5,877
Записей в блоге: 1
11.03.2019, 16:43 13
Цитата Сообщение от IGPIGP Посмотреть сообщение
И тоже может пересматриваться в разработке и дальнейшей жизни.
структура наследования стандартного ввода вывода перестраивалась? или я путаю что то.
0
Комп_Оратор)
Эксперт по математике/физике
8948 / 4702 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
11.03.2019, 17:16 14
Цитата Сообщение от _stanislav Посмотреть сообщение
структура наследования стандартного ввода вывода перестраивалась? или я путаю что то.
Это не о том.
0
11.03.2019, 17:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.03.2019, 17:16
Помогаю со студенческими работами здесь

Массив объектов (классов)
Есть вектор из классов, у вектора должны быть методы/функции для вывода,сортировки и тд. Как это...

Создание классов и объектов
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; class gai {...

Создание классов и объектов
Написать программу создания класса. File: Имя файла, Размер, Дата создания, Количество обращений....

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru