Как описать функцию-член с "void *" в качестве входных данных в UML? - PullRequest
2 голосов
/ 05 мая 2020

Я новичок в UML, как описать следующий класс с функцией-членом, которая принимает void *?

// used on linux
#include <unistd.h>

class LinuxReadWrapper
{
  public:
    LinuxReadWrapper(){/** Ctor */}
    ~LinuxReadWrapper(){/** Dtor */}

    ssize_t WrapperRead(void* buf)
    {
      return read(fd, buf, cnt);
    }

  private:
    int fd{-1};
    size_t cnt{0};
};

Спасибо!

Ответы [ 2 ]

2 голосов
/ 05 мая 2020

Одним из решений может быть создание типа void или void * в вашей модели. Затем введите свой входной параметр, см. Ниже. Это также зависит от того, нужно ли вам это только для целей документации или также для генерации / реверса кода. В последнем случае это будет зависеть от используемого инструмента ...

enter image description here

1 голос
/ 09 мая 2020

Хотя ответ Red Bear очень практичен, стоит напомнить, что:

  • Встроенный UML примитивные типы ограничены: Integer, * Типы UML 1007 *, Boolean, UnlimitedNatural и Real
  • могут быть расширены с помощью профиля . Такой профиль может расширить стандартную метамодель UML и ввести новую «datatype». Профиль - это пакет, который вы можете импортировать во все модели, которые в нем нуждаются. Обычно существует профиль языка программирования для типов c специфических языков программирования.
  • Указатель (например, my_type *) требует особой осторожности, потому что в общем случае указатель не является типом, релевантным для модели UML, поскольку цель указателя - реализовать связь с простым объектом (например, класса my_type).
  • В этом отношении указатель void* является чем-то особенным, так как он указывает на объект неизвестного типа, поэтому сохранение его в том виде, в каком он есть в модели, является понятным подходом.

Хорошая новость в том, что типы данных являются стандартной функцией UML. Так что в любом достойном инструменте моделирования вы должны найти способ. Например:

  • Enterprise Architect позволяет добавлять новые типы данных в ваш проект
  • StarUML позволяет добавлять новые типы данных в ваш проект
  • Visual Pardigm позволяет добавлять новые типы данных в конфигурацию проекта
  • Многие инструменты просто позволяют использовать любой тип, который вы хотите. Например, Visual Studio просто позволяет использовать любой тип данных и добавляет в модель нераспознанные типы.
  • эт c ...
...