web-dev-qa-db-fra.com

Programmation descendante et ascendante

Pourquoi disons-nous que des langages tels que C sont descendants alors que OOP langages comme Java ou C++ sont ascendants? Cette classification a-t-elle une importance dans le logiciel développement?

34
buz

L'approche "descendante" prend une définition de haut niveau du problème et le subdivise en sous-problèmes, que vous effectuez ensuite de manière récursive jusqu'à ce que vous soyez en morceaux qui sont évidents et faciles à coder. Ceci est souvent associé au style de programmation "décomposition fonctionnelle", mais ce n'est pas nécessaire.

Dans la programmation "ascendante", vous identifiez des outils de niveau inférieur que vous pouvez composer pour devenir un programme plus important.

En réalité, presque toute la programmation se fait avec une combinaison d'approches. dans la programmation orientée objet, vous subdivisez généralement le problème en identifiant les objets de domaine (qui est une étape descendante), en les affinant, puis en les recombinant dans le programme final - une étape ascendante.

66
Charlie Martin

Dans le développement de haut en bas, vous commencez avec votre fonction principale, puis pensez aux principales étapes que vous devez suivre, puis vous divisez chacune de ces étapes en leurs sous-parties, etc.

Dans la programmation ascendante, vous pensez aux fonctionnalités de base et aux pièces dont vous aurez besoin et les construisez. Vous développez les acteurs et leurs méthodes, puis vous les liez pour former un tout cohérent.

La POO tend naturellement vers le bas vers le haut lorsque vous développez vos objets, tandis que la programmation procédurale tend vers le haut vers le bas lorsque vous commencez avec une fonction et que vous l'ajoutez lentement.

19
Eclipse

Je n'ai jamais entendu cette classification appliquée à des langages spécifiques, c'est plutôt un paradigme de programmation - est-ce que vous remplissez d'abord les détails (c.-à-d. Construisez des méthodes d'implémentation complètes) puis les mettez ensemble (par exemple, appelez-les à partir de la méthode main ()), ou commencer par le flux logique, puis étoffer la mise en œuvre?

Vous pouvez vraiment faire les deux avec les deux types de lanages ... Mais je dirais que c'est généralement le contraire, dans les langues actuelles OOP vous allez d'abord définir les interfaces, former la structure logique, et seulement après s'inquiéter de l'implémentation, alors que les langages procéduraux simples comme C, vous devez réellement implémenter certaines méthodes avant de les appeler.

4
AviD

Je n'ai jamais entendu les termes "de haut en bas" et "de bas en haut" utilisés de cette façon.

Les termes sont généralement utilisés pour décrire comment on aborde la conception et la mise en œuvre d'un système logiciel et s'appliquent ainsi à tout langage ou paradigme de programmation.

Dans "On LISP", Paul Graham utilise le terme "bottom-up" légèrement différemment pour signifier l'extraction continue de fonctionnalités communes dans des fonctions partagées afin que vous finissiez par créer un nouveau dialecte de LISP de niveau supérieur qui vous permet de programmer en fonction de votre application. domaine. Ce n'est pas une utilisation courante du terme. De nos jours, nous appellerions cela "refactoring" et "langages intégrés spécifiques au domaine" (et les anciens programmeurs LISP se moquaient du fait que LISP était capable de le faire depuis les années 1950).

4
Nat

Dans une approche descendante, le système est d'abord formulé en spécifiant mais sans détailler aucun sous-système au début, puis chaque système et son sous-système sont définis en détail jusqu'à ce qu'il soit spécifié à la base.

par exemple, dans un programme C, il faut déclarer des fonctions en haut du programme, puis par le biais de l'entrée principale de chaque sous-système/sous-programme est défini en détail.

Dans l'approche ascendante, la première conception, du niveau de base au niveau abstrait, est effectuée.

par exemple, dans c ++/Java commence la conception à partir de la classe à partir du niveau de base des fonctionnalités de programmation, puis passe à la partie principale du programme.

2
varinder

Cette page Wikipedia l'explique assez bien http://en.wikipedia.org/wiki/Top-down#Programming

2
Vini

Il s'agit davantage de paradigme (orienté objet, impératif, fonctionnel, etc.) que de syntaxe.

De dept-info.labri.fr

La programmation ascendante est l'opposé de la programmation descendante. Il se réfère à un style de programmation où une application est construite en commençant par les primitives existantes du langage de programmation , et en construisant progressivement des fonctionnalités de plus en plus compliquées, jusqu'à ce que le toute la demande a été écrite.

Plus loin dans le même article:

Dans un langage tel que C ou Java, la programmation ascendante prend la forme de la construction de types de données abstraits à partir de primitives du langage ou à partir de types de données abstraits existants.

1
Rytek

Je crois que la différence entre l'approche descendante et l'approche ascendante de la programmation est que l'approche descendante prend le problème et entre et se décompose en étapes gérables et l'approche ascendante détaille en fait ces étapes.

1
Xcode

La plupart des langages procéduraux ou de bas niveau suivent une approche descendante comme le langage C. De même, des langages de haut niveau comme Java, c ++ etc. suivent l'approche ascendante).

Dans l'approche descendante, tous les systèmes ou les grandes fonctions sont décomposés en petit sous-système tandis que dans l'approche ascendante, les petits sous-systèmes sont combinés pour développer un grand et final système.

par exemple, récursif est une approche descendante tandis qu'itératif est une approche ascendante.

0
Vivek