Что такое Функциональное Разложение? [закрытый]

Используя act-native-device-info , вы можете получить следующие данные (выполненные на симуляторе):

getUniqueID: DB71DCB5-6BB0-497B-BE9E-A02BCC1235B7
getInstanceID: undefined
getDeviceId: x86_64
getManufacturer: Apple
getModel: Simulator
getBrand: Apple
getSystemName: iOS
getSystemVersion: 10.1
getBundleId: org.reactjs.native.example.project
getBuildNumber: 1
getVersion: 1.0
getReadableVersion: 1.0.1
getDeviceName:MacBook Pro
getUserAgent: Mozilla/5.0 (iPhone; CPU iPhone OS 10_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Mobile/14B72
getDeviceLocale: en
getDeviceCountry: US
getTimezone: America/Panama
isEmulator: true
isTablet: false

37
задан Yvette Colomb 11 November 2018 в 23:08
поделиться

4 ответа

Функциональная декомпозиция - это процесс разбиения сложного процесса на более мелкие и простые части.

Например, подумайте об использовании банкомата. Вы можете разложить этот процесс на:

  1. Подойдите к банкомату

  2. Вставьте свою банковскую карту

  3. Введите свой пин-код

хорошо ... вы поняли.

Вы можете подумать о программировании того же путь. Подумайте о программном обеспечении, в котором запущен банкомат:

  1. Код для чтения карты

  2. Проверка PIN-кода

  3. Обработка передачи

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

Декомпозиция (программирование)

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

Очевидный недостаток - это временные затраты.

62
ответ дан 27 November 2019 в 04:33
поделиться

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

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

** Mobile dev, Silverlight, Voice XML, что угодно - притворившись, что вы не знакомы с технологией своего «нового» уровня пользовательского интерфейса, вы сможете абстрагироваться от своих проблем и меньше увлекаться деталями реализации.

однако есть некоторые распространенные ошибки

  • , которые не раскрываются достаточно далеко или слишком далеко - каждый человек должен определить необходимый уровень детализации, чтобы обеспечить понимание компонента, не переусердствуя с ним (не разбивайтесь на программные строки кода ...)
  • без учета ранее существовавших шаблонов / модулей кода (переработка)
  • без рассмотрения с клиентами, чтобы убедиться в правильности объема
  • , без использования разбивки при фактическом кодировании (например, спроектировать дом, чем забыть о плане и просто приступить к соединению нескольких досок)
6
ответ дан 27 November 2019 в 04:33
поделиться

Вот пример: ваш компилятор C.

Сначала препроцессор: он обрабатывает #include и #define и все макросы. Вы даете ему имя файла и некоторые параметры, и он возвращает очень длинную строку. Назовем эту функцию preprocess (filename) .

Затем есть лексический анализатор. Он берет строку и разбивает ее на токены. Назовите его lex (строка) . Парсер берет токены и превращает их в дерево, назовем это синтаксическим анализом (токенами) . Затем есть функция для преобразования дерева в DAG блоков, называемая dag (tree) . Вызовите эмиттер кода emit (dag) , который принимает DAG блоков и выводит ассемблер.

Тогда компилятор:

emit(dag(parse(lex(preprocess(filename)))));

Мы разложили большой, сложная для понимания функция (функция compile ) в кучу более мелких, более простых для понимания функций. Вам не обязательно делать это как конвейер, вы можете написать свою программу как:

process_data(parse_input(), parse_config())

Это более типично; компиляторы - довольно глубокие программы, большинство программ для сравнения широки.

3
ответ дан 27 November 2019 в 04:33
поделиться

Функциональная декомпозиция - это способ разбить сложную проблему на более простые задачи, основанные на задачах, которые необходимо выполнить, а не на взаимосвязях данных. Этот термин обычно ассоциируется со старым процедурно-ориентированным дизайном.

Краткое описание разницы между процедурно-ориентированным и объектно-ориентированным дизайном.

3
ответ дан 27 November 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: