Программирование сверху вниз и снизу вверх

Компилятор будет генерировать код для каждого экземпляра шаблона при использовании шаблона во время этапа компиляции. В процессе компиляции и компоновки файлы .cpp преобразуются в чистый объектный или машинный код, который в них содержит ссылки или неопределенные символы, поскольку файлы .h, которые включены в ваш main.cpp, не имеют реализации YET. Они готовы быть связаны с другим объектным файлом, который определяет реализацию для вашего шаблона, и, следовательно, у вас есть полный исполняемый файл a.out. Однако, поскольку шаблоны необходимо обрабатывать на этапе компиляции, чтобы сгенерировать код для каждого экземпляра шаблона, который вы делаете в своей основной программе, ссылка не поможет, поскольку компиляция main.cpp в main.o, а затем компиляция вашего шаблона .cpp в template.o, а затем ссылка не будет достигать цели шаблонов, потому что я связываю различные экземпляры шаблонов с одной и той же реализацией шаблона! И шаблоны должны делать обратное, т. Е. Иметь одну реализацию, но допускать много доступных экземпляров посредством использования одного класса.

Значение typename T get заменяется во время этапа компиляции, а не на этапе связывания, поэтому, если я попытаюсь для компиляции шаблона без замены T в качестве конкретного типа значения, чтобы он не работал, потому что это определение шаблонов - это процесс времени компиляции, а мета-программирование btw - все об использовании этого определения.

34
задан Nic Scozzaro 21 November 2018 в 23:26
поделиться

6 ответов

Подход «сверху вниз» берет определение проблемы на высоком уровне и подразделяет ее на подзадачи, которые затем выполняются рекурсивно, пока не будут разбиты на части, которые очевидны и легко кодируются. Это часто связано со стилем программирования «функциональная декомпозиция», но это не обязательно.

В программировании «снизу вверх» вы определяете инструменты более низкого уровня, которые вы можете составить, чтобы стать более крупной программой.

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

66
ответ дан 27 November 2019 в 06:37
поделиться

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

В программировании снизу вверх вы подумайте об основных функциях и частях, которые вам понадобятся, и создайте их. Вы разрабатываете акторов и их методы, а затем связываете их вместе, чтобы создать единое целое.

ООП естественно имеет тенденцию к снизу вверх, когда вы разрабатываете свои объекты, в то время как процедурное программирование имеет тенденцию к сверху вниз, когда вы начинаете с одного. функции и медленно добавляйте к ней.

20
ответ дан 27 November 2019 в 06:37
поделиться

I've never heard that classification applied to specific languages, rather it's a programming paradigm - do you first fill out the details (i.e. build full implementation methods) and then put them together (e.g. call them from them main() method), or start with the logical flow and then flesh out the implementation?

You can really do either with both types of lanugages... But I would say it's typically the opposite, in current OOP languages you'll first define the interfaces, forming the logical structure, and only afterwards worry about the implementation, whereas straight procedural languages like C, you need to actually implement some methods before you call them.

5
ответ дан 27 November 2019 в 06:37
поделиться

'git cherry-pick' should be your answer here.

Apply the change introduced by an existing commit.

Do not forget to read bdonlan's answer about the consequence of cherry-picking in this post:
"Pull all commits from a branch, push specified commits to another", where:

A-----B------C
 \
  \
   D

becomes:

A-----B------C
 \
  \
   D-----C'

The problem with this commit is that git considers commits to include all history before them

Where C' has a different SHA-1 ID.
Точно так же выбор вишневого коммита из одной ветки в другую в основном включает в себя создание патча, а затем его применение, таким образом, теряя историю.

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

.
4
ответ дан 27 November 2019 в 06:37
поделиться

На этой странице Википедии это довольно хорошо объясняется http://en.wikipedia.org/wiki/Top-down#Programming

2
ответ дан 27 November 2019 в 06:37
поделиться

C - это структурированный язык, и последовательность программ идет сверху вниз. начиная с основного метода.

, в то время как ООП зависит от количества классов и объектов. поток программы не идет сверху вниз в ООП

-5
ответ дан 27 November 2019 в 06:37
поделиться
Другие вопросы по тегам:

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