В качестве хобби и практического упражнения я хочу реализовать одну и ту же модель предметной области (простую библиотеку GPS / GIS, вдохновленную стандартами ISO 191xx и абстрактной моделью OGC) как на Python, так и на C #.
Сначала я подумал: «Ну, ISO / OGC дал мне законченный UML, поэтому у меня будет одна и та же подпись для каждого класса на C # и на Python».
Я быстро обнаружил, что застрял в проблеме «строгая / статическая или утиная типизация», так как я не могу рассчитывать на сигнатуры методов в python. Например:
- Перегрузка конструкторов довольно распространена и естественна в C #, но в Python вы должны прибегать к
*args **kwargs
и условным операторам; - В C # свойства приветствуются, но большая часть исходного кода, который я видел в Python, имеет тенденцию устанавливать поля напрямую, хотя использование
@property
илиproperty()
довольно просто. - (и так далее).
На самом деле существует (очевидно) очевидная и очень хорошо задокументированная «разница в мышлении» между одним языком и другим, и я хотел бы уважать эти различия, в то же время заканчивая «тем же» приложением, то есть эквивалентным модель предметной области, архитектура и функциональность.
Итак, мой вопрос в основном таков:
Если мне нужно реализовать одну и ту же абстрактную модель («UML-подобную») в Python и C #, как мне действовать, и в частности, какие конструкции должны быть инвариантными, а какие - разными?