Programmation de haut en bas et de bas en haut
Pourquoi disons-nous que le langage tel que C est top-down alors que les langages OOP comme java ou C++ comme bottom-up?. Cette classification a-t-elle une importance dans le développement de logiciels?
9 réponses
L'approche "top down" prend une définition de haut niveau du problème et le subdivise en sous-problèmes, que vous faites ensuite récursivement jusqu'à ce que vous soyez en morceaux évidents et faciles à coder. Ceci est souvent associé au style de programmation "décomposition fonctionnelle", mais n'a pas besoin de l'être.
Dans la programmation "bottom up", vous identifiez les outils de niveau inférieur que vous pouvez composer pour devenir un programme plus grand.
En réalité, presque toute la programmation se fait avec une combinaison des 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), et en les affinant, puis en les recombinant dans le programme final - une étape ascendante.
Dans le développement de haut en bas, vous commencez avec votre fonction principale, puis pensez aux principales étapes que vous devez prendre, puis vous divisez chacune de ces étapes en sous-parties, et ainsi de suite.
Dans la programmation ascendante, vous pensez aux fonctionnalités de base et aux pièces dont vous aurez besoin et vous les construisez. Vous développez les acteurs et leurs méthodes, puis vous les attachez ensemble pour former un tout cohérent.
La POO tend naturellement vers le bas au fur et à mesure que vous développez vos objets, alors que la programmation procédurale tend vers le haut vers le bas que vous commencez avec une fonction et ajouter lentement à elle.
Je n'ai jamais entendu les Termes "top-down" et "bottom-up" 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 donc à tout langage ou paradigme de programmation.
Dans" on LISP", Paul Graham utilise le terme "bottom-up" légèrement différemment pour signifier extraire continuellement des fonctionnalités communes en fonctions partagées afin que vous finissiez par créer un nouveau dialecte de LISP de niveau supérieur qui vous permet de programmer termes de votre domaine d'application. Ce n'est pas un usage courant du terme. Ces jours-ci, nous appellerions cela "refactoring" et "langages embarqués spécifiques à un domaine" (et les anciens programmeurs LISP ricaneraient que LISP a été capable de le faire depuis les années 1950).
Je n'ai jamais entendu cette classification appliquée à des langages spécifiques, c'est plutôt un paradigme de programmation-remplissez-vous d'abord les détails (c'est-à-dire construisez des méthodes d'implémentation complètes), puis rassemblez-les (par exemple, appelez-les à partir de la méthode main ()), ou commencez par le flux logique et ensuite étoffez l'implémentation?
Vous pouvez vraiment faire l'un ou l'autre avec les deux types de lanugages... Mais je dirais que c'est généralement le contraire, dans les langues OOP actuelles, vous définirez d'abord le interfaces, formant la structure logique, et seulement après s'inquiéter de l'implémentation, alors que les langages procéduraux droits comme C, vous devez réellement implémenter certaines méthodes avant de les appeler.
Cette page de Wikipédia l'explique assez bien http://en.wikipedia.org/wiki/Top-down#Programming
C'est plus sur le paradigme (orienté objet, impératif, fonctionnel etc.) que de la syntaxe.
À Partir de dept-info.labri.fr
La programmation ascendante est le contraire de la programmation descendante. Il fait référence à un style de programmation où une application est construite en commençant par les primitives existantes du langage de programmation , et construire progressivement des caractéristiques de plus en plus compliquées, jusqu'à ce que le l'ensemble de l'application a été écrire.
Plus loin dans le même article :
Dans un langage tel que c ou Java, la programmation ascendante prend la forme de construire des types de données abstraites à partir de primitives du langage ou à partir de types de données abstraites existants.
Dans l'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 est défini 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 à travers l'entrée principale de chaque sous-système/sous-programme est défini en détail.
Dans l'approche ascendante première conception, en commençant par le niveau de base à l'abstrait le niveau est terminé.
Par exemple - en C++ / java commence à concevoir à partir de la classe à partir du niveau de base des fonctionnalités de programmation, puis passe à la partie principale du programme.
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 se décompose en étapes gérables et l'approche ascendante détaille ces étapes.
C est un langage structuré et la séquence des programmes est de haut en bas. à partir de la méthode main.
Alors que la POO dépend du nombre de classes et d'objets. le flux du programme n'est pas dans l'approche descendante dans la POO