Как правильно генерировать код для композиции? - PullRequest
0 голосов
/ 24 июня 2018

Я пытался найти правильное решение для генерации кода классов на основе композиции.

Composition

Из приведенного выше представления и с использованием 2 инструментов (MagicDraw и Enterprise Architect) я получил 2 разных варианта генерации кода для файла Person.h:

MagicDraw:

class Person
{   
    int age;    
    string fname;   
    Head haveHead;  
    string lname;   
};

Архитектор предприятия:

class Person
{

public:
    Person();
    virtual ~Person();
    Head *m_Head;

private:
    int age;
    string fname;
    string lname;

};

Итак, в MagicDraw у меня есть член класса Head, но в коде Enterprise Architect у меня есть указатель?

Я знаю, что Head является частью объекта Person, и его существование управляется объектом Person ... Поэтому я предполагаю, что код, сгенерированный MagicDraw, является более подходящим.

Мой вопрос, правильный ли код, сгенерированный Enterprise, тоже?

В случае обоих правильных, какой из них лучший?

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Не думаю, что одно лучше другого. Обычно на такие вопросы нет ответа, если только вы не сравниваете две вещи, одна из которых крайне уступает другой, но здесь есть несколько моментов, на которые следует обратить внимание.

Enterprise Architect сделал m_head публичным (я не хочу, чтобы у всех был доступ к моей голове!). Если вы не хотите и не хотите, чтобы он был публичным (хотя есть и лучшие способы, чем его публикация), это нежелательно. Кроме того, это указатель, так что одна голова может быть назначена более чем одному человеку, но вам может понадобиться, как предложено в комментариях @coredump, для доступа к подклассу Head во время выполнения. Также эта версия обеспечивает управление памятью самостоятельно. Вам нужно динамически выделять во время строительства, а затем убирать за собой. Однако перемещение этой версии дешевле, если Head нетривиально подвижно и возможно, даже если Head не перемещается по какой-то причудливой причине.

Версия Magic Draw сделала все приватным, поэтому нет доступа к чьей-то голове. Одна голова принадлежит только одному человеку. Память управляется автоматически. Перемещение дороже, если Head нетривиально подвижно и невозможно, если Head не подвижно.

Вы должны выбрать то, что соответствует вашим потребностям лучше всего.

0 голосов
/ 24 июня 2018

Также, на мой взгляд, версия MagicDraw более правильная, по крайней мере, с семантической точки зрения. Ключевым моментом является то, что в этом случае отношение 1 <-> 1 сформулировано более явно, и оно не может быть злоупотреблено . В другом случае вы можете потенциально связать более одного Head с конкретным Person.

...