LINUX.ORG.RU

Делать вложенные классы или нет?

 ,


1

3

Пусть есть некая модель: http://medical.nema.org/dicom/2013/output/chtml/part17/sect_C.5.html

Patient
Study
Series
Waveform
Waveform\MultiplexGroup
Waveform\Chanel
Waveform\Sample
Которую надо представить в виде классов в библиотеке на C++.

Так же планируется задействовать SWIG для предоставления доступа к библиотеке из Python.

Как в данном случае упорядочить и назвать классы:

1:

namespace dicom {
class Patient;
class Study;
class Series;
class Waveform;
class WaveformMultiplexGroup;
class WaveformChannel;
class WaveformSample;
}

2:

namespace dicom {
class Patient;
class Study;
class Series;
class Waveform {
  class MultiplexGroup;
  class Channel;
  class Sample;
  ...
};
}

3:

namespace dicom {
class Patient;
class Study;
class Series;
class Waveform
namespace wf {
  class MultiplexGroup;
  class Channel;
  class Sample;
}
}

★★★★★

Последнее исправление: AlexVR (всего исправлений: 1)

Ответ на: комментарий от anonymous

Свою систему по обработке медицинских данных (электрогастроэнтерография). Задача: ЦОС и статистика. Учитывая, что наши производители оборудования клали болт на все стандарты, то приходиться писать свои конверторы. Ну а так как решаются вопросы по добавлению методов обработки сигналов, нужна простая в использовании библиотека в конкретной прикладной области.

AlexVR ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Обоснуйте.

С тех пор, как namespace реализуется во всех компиляторах, обосновывать нужно использование вложенных классов. О сложностях SWIG при работе с вложенными классами написано в документации по SWIG.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Шаблоны

Суть в том, что неймспейс - не тип, а вот класс - тип.

Правда, как проиллюстрировать нужность этого, я пока не допёр

yoghurt ★★★★★
()
Ответ на: комментарий от tailgunner

Шаблоны и SWIG - это лютая содомия.

:), но вполне ещё реализуемая.

AlexVR ★★★★★
() автор топика
Ответ на: комментарий от Y

Неа. Я бы перенёс в namespace. Логичней, в namespace Waveform находится сам класс Waveform и служебные.

Тут момент в том, что на первом уровне удобно оперировать Patient/Study/Series/Waveform, а не Patient/Study/Series/waveform::Waveform

AlexVR ★★★★★
() автор топика
Ответ на: комментарий от AlexVR

Как по мне, так это дело вкуса. А о вкусах не спорят.

Просто, когда мы пишем Waveform::Waveform мы можем предположить, что есть ещё связанные сущности. Но недостататок этого подхода также очевиден.

Y ★★
()

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

В отличие от варианта 2, он не даёт изолировать MultiplexGroup, Channel и Sample внутри Waveform. То есть при варианте 3 методы, например, класса Patient смогут вызывать wf::Sample. Неплохо бы это исключить на уровне инкапсуляции классов.

Cheater
()
Ответ на: комментарий от Cheater

В отличие от варианта 2, он не даёт изолировать MultiplexGroup, Channel и Sample внутри Waveform. То есть при варианте 3 методы, например, класса Patient смогут вызывать wf::Sample. Неплохо бы это исключить на уровне инкапсуляции классов.

А что им мешало бы вызывать Waveform::Sample? Скрывать последние три класса нет смысла, т.к. они описывают данные, к которым нужен доступ из вне. А если подумать, то 2 - самый ущербные и ограниченный вариант.

AlexVR ★★★★★
() автор топика

Я бы не рискнул. Вложенные логически возможны, но по усложнению проекта - утонешь в них.

Romanych
()
Ответ на: комментарий от anonymous

внутренние классы должны быть внутренними. а плодить неймспейс резона нет вообще никакого

MyTrooName ★★★★★
()
Ответ на: комментарий от tailgunner

Конечно-конечно.

«Вы хотите поговорить об этом?»(ц)

У меня скажем типовой макефайл выглядит вот так:

name=macrospin
headers=macrospin.hpp
modules=macrospin.cpp

include aivlib/Makefile
При том что в питон тащится куча шаблонов;-)

AIv ★★★★★
()
Ответ на: комментарий от tailgunner

А... извини, туплю.

Мне щас несколько не с руки детально вчитываться, но --- с нэймспейсами не надо играться, если планируется юзать свиг и питон, можно найти неожиданные проблемы с неочевидным решением. Если так уж хочется прямо вот сгруппировать классы, лучше приделать к их именам какие нить префиксы.

С вложенными классами я под свигом имел скорее отрицательный опыт работы. Шаблоны вложенные во всяком случае он ЕМНИП не понимает. Без шаблонов мне было неинтересно, если ТС попробует пущай расскажет как оно выглядит и завелось ли;-)

AIv ★★★★★
()

Нормальная форма не только для баз данных. Более того немногие могут в нормальные формы. Скорее никто.

P.S. А ещё есть деревья.

Ахахахаха! (демон оптимизации к вашим услугам)

anonymous
()
Ответ на: комментарий от AIv

А когда будет не случайно? Вы покинули срач на лоре/батлы, либо это временно? Я скучаю, да и не понятно - я проболаболил или нет. Неопределённость она такая.

carb_blog10
()
Ответ на: комментарий от carb_blog10

Работы туева хуча. 3 проекта + еще 2 на старте. Как поперло с зимы, так и не отпускает... не до ЛОР-а пока:-(

AIv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.