Программная инженерия

Q & A для профессионалов, преподавателей и студентов, работающих в жизненном цикле разработки систем

3
Использование интерфейсов для слабосвязанного кода
Фон У меня есть проект, который зависит от использования определенного типа аппаратного устройства, хотя на самом деле не имеет значения, кто делает это аппаратное устройство, если оно делает то, что мне нужно. При этом даже два устройства, которые должны делать одно и то же, будут иметь различия, если они не …

4
Должен ли каждый класс, который я пишу, придерживаться интерфейса?
Я пишу игру на Typescript и решил, что буду пытаться придерживаться идеи « программирования на основе интерфейса », где вы пишете код, основанный на интерфейсе, а не на реализации объекта. Я написал большое количество интерфейсов и классов, которые их реализуют, затем сделал шаг назад и понял, что классы достаточно просты, …

3
Убедитесь, что небезопасный код не используется случайно
Функция f()использует eval()(или что-то столь же опасное) с данными, которые я создал и сохранил local_fileна компьютере, на котором запущена моя программа: import local_file def f(str_to_eval): # code.... # .... eval(str_to_eval) # .... # .... return None a = f(local_file.some_str) f() безопасен для запуска, так как строки, которые я ему предоставляю, …

3
Алгоритм генерации всех множеств m точек в nxnxn кубической решетке, которые уникальны по симметрии
Я реализую алгоритм, который будет довольно сложным в вычислительном отношении, и хочу попытаться убедиться, что я не делаю ненужную работу. Существует nxnxn кубическая решетка, например, если n = 2, она состоит из (0,0,0), (0,1,0), (1,0,0), (1,1,0), (0, 1,1), (0,0,1), (1,0,1), (1,1,1). Из этой решетки я буду рекурсивно генерировать все множества …

3
Как управлять единой ответственностью, когда ответственность разделена?
У меня есть два базовых класса, Operationи Trigger. У каждого есть несколько подклассов, которые специализируются на определенных типах операций или триггеров. А Triggerможет вызвать конкретный Operation. Хотя Operationможет быть вызвано конкретным Trigger. Мне нужно написать код, который сопоставляет данное Operationс данным Trigger(или наоборот), но я не уверен, где его поставить. …

3
Если вы можете использовать def для переопределения переменных, как это считается неизменным?
Пытаясь выучить Clojure, вы не можете не говорить, как непрерывно рассказывает Clojure об неизменных данных. Но вы можете легко переопределить переменную, используя defправо? Я понимаю, что разработчики Clojure избегают этого, но вы можете избежать изменения переменных на любом языке. Может кто-нибудь объяснить мне, чем это отличается, потому что я думаю, …
10 clojure 

2
Является ли наследование Python стилем наследования «как есть» или композиционным стилем?
Учитывая, что Python допускает множественное наследование, как выглядит идиоматическое наследование в Python? В языках с единичным наследованием, таких как Java, наследование будет использоваться, когда вы можете сказать, что один объект «a-a» другого объекта и вы хотите разделить код между объектами (от родительского объекта до дочернего объекта). Например, вы можете сказать, …

5
Генерация Java-классов с параметрами значения времени компиляции
Рассмотрим ситуацию, когда класс реализует одно и то же базовое поведение, методы и так далее, но для разных целей может существовать несколько разных версий этого класса. В моем конкретном случае у меня есть вектор (геометрический вектор, а не список), и этот вектор может применяться к любому N-мерному евклидову пространству (1-мерное, …

3
Избегайте конструкторов со многими аргументами
Так что у меня есть фабрика, которая создает объекты разных классов. Все возможные классы происходят от абстрактного предка. Фабрика имеет файл конфигурации (синтаксис JSON) и решает, какой класс создать, в зависимости от конфигурации пользователя. Чтобы добиться этого, фабрика использует boost :: property_tree для JSON-анализа. Он идет по дереву и решает, …

2
Почему программисты определяют модели программирования для замены C / POSIX для параллелизма?
Поставщики новых компьютерных архитектур регулярно пытаются представить новые модели программирования, например, недавно CUDA / OpenCL для GPGPU, и заменяют C / POSIX в качестве интерфейса управления для параллелизма платформы. (Poss & Koening, AM3: на пути к аппаратному ускорителю Unix для многоядерных процессоров, 2015 г.) Почему разработчики архитектуры пытаются разработать новые …

3
Свойства Stubbing с частными сеттерами для тестов
У нас есть объект public class MyObject{ protected MyObject(){} public string Property1 {get;private set;} public string Property2 {get;private set;} public string Property3 {get;private set;} public string Property4 {get;private set;} public string Property5 {get;private set;} public string Property6 {get;private set;} public string Property7 {get;private set;} public string Property8 {get;private set;} public …

2
Почему LGPL требует, чтобы объединенные работы включали копию GPL?
Я читал лицензию LGPL и нашел требование, о котором раньше не знал. Раздел 4 (Совместные работы) гласит: Вы можете передать Комбинированную работу [...], если вы также выполните одно из следующих действий: а) С каждой копией Комбинированного произведения сделайте заметное уведомление о том, что Библиотека используется в нем и что Библиотека …

2
Преимущества семантики копирования при записи
Мне интересно, какие возможные достоинства есть у копирования при записи? Естественно, я не жду личных мнений, но реальных практических сценариев, где это может быть технически и практически выгодно ощутимым образом. И под осязаемым я имею в виду нечто большее, чем спасение вас от набора &символов. Для пояснения этот вопрос относится …
10 c++  qt 

3
Какое хранилище данных лучше всего подходит для моего сценария?
Я работаю над приложением, которое включает в себя очень высокое выполнение запросов на обновление / выборку в базе данных. У меня есть базовая таблица (A), в которой будет около 500 записей для объекта за день. И для каждого пользователя в системе изменение этого объекта создается на основе некоторых предпочтений пользователя, …

4
Таблицы поиска: являются ли они утечкой в ​​модели предметной области?
Вы строите систему, которая отслеживает компании. Эти компании имеют контакты. Эти контакты часто являются специалистами, которые отвечают только на некоторые типы вопросов, таких как выставление счетов / оплата, продажи, заказы и поддержка клиентов. Используя доменно-управляемый дизайн и архитектуру Onion, я смоделировал это со следующими типами: Компания Имеет контакты контакт Имеет …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.