Реализовать одну и ту же модель предметной области в Python и C # - что должно быть одинаковым, а что должно отличаться?

В качестве хобби и практического упражнения я хочу реализовать одну и ту же модель предметной области (простую библиотеку GPS / GIS, вдохновленную стандартами ISO 191xx и абстрактной моделью OGC) как на Python, так и на C #.

Сначала я подумал: «Ну, ISO / OGC дал мне законченный UML, поэтому у меня будет одна и та же подпись для каждого класса на C # и на Python».

Я быстро обнаружил, что застрял в проблеме «строгая / статическая или утиная типизация», так как я не могу рассчитывать на сигнатуры методов в python. Например:

  • Перегрузка конструкторов довольно распространена и естественна в C #, но в Python вы должны прибегать к *args **kwargs и условным операторам;
  • В C # свойства приветствуются, но большая часть исходного кода, который я видел в Python, имеет тенденцию устанавливать поля напрямую, хотя использование @property или property() довольно просто.
  • (и так далее).

На самом деле существует (очевидно) очевидная и очень хорошо задокументированная «разница в мышлении» между одним языком и другим, и я хотел бы уважать эти различия, в то же время заканчивая «тем же» приложением, то есть эквивалентным модель предметной области, архитектура и функциональность.

Итак, мой вопрос в основном таков:

Если мне нужно реализовать одну и ту же абстрактную модель («UML-подобную») в Python и C #, как мне действовать, и в частности, какие конструкции должны быть инвариантными, а какие - разными?


person heltonbiker    schedule 28.06.2014    source источник


Ответы (1)


То, что вы назвали «абстрактной моделью» в MDA, называется платформенно-независимой моделью (PIM), а ее реализация на C # и / или Python называется платформенно-зависимой моделью (PSM). Предполагается, что существуют преобразования / генераторы кода из PIM в PSM, поэтому в зависимости от того, как работают эти генерации кода, вы получите соответствующий исходный код C # и Python. Обычно такие инструменты предоставляют средства для управления сгенерированным кодом. И такой контроль обычно осуществляется с помощью аннотаций PIM, специфичных для генерируемого вами PSM. Надеюсь это поможет.

person Vladimir Vaschenko    schedule 09.10.2015