Partage
  • Partager sur Facebook
  • Partager sur Twitter

Programmation fonctionelle et orientée objet

    30 octobre 2018 à 22:27:07

    Bonjour,

    J'ai plusieurs questions :

    1 ) Qu'est-ce que la programmation fonctionnelle ? Est-ce utile pour coder ?  Par exemple Jss est un langage de programmation fonctionnelle côté client, utilisé pour le web, les boutons..... J'ai vu que les fonctions sont de premier ordre, et que cela signifie que la valeur de retour d'une fonction peut être affectée, j'ai vu que cela parlé de solution de systèmes différentielles de premier ordre. Java, C , Python C++, R sont donc fonctionnelles, SAS aussi je crois.

    2) L'orientée objet en gros c'est une manière de coder ? On utilise d'autres mots ; procédure, méthode, attribut, class, le but c'est de "modulariser" le plus le code, de le rendre le plus par bloc ?

    Je vous remercie

    • Partager sur Facebook
    • Partager sur Twitter
      31 octobre 2018 à 9:11:27

      Salut,

      On appelle ces courants de pensées les paradigmes de programmation, si tu veux te renseigner commence par parcourir les wiki

      Je ne suis pas le plus à même de te répondre car j'ai finalement assez peu d'expériences différentes, mais voici ce que je pense pouvoir dire :

      1)
      La programmation fonctionnelle te fait concevoir tes développements comme un ensemble de fonction bijective au sens mathématique, à un ensemble d'entrée correspond une sortie. Il n'y a pas de notion d'état, la fonction retournera toujours le même résultat avec les mêmes valeurs d'entrée.
      Je crois que tu confonds la programmation fonctionnelle avec la programmation imperative, ou procédural, car bien qu'on puisse faire de la programmation fonctionnelle avec les langages que tu as cité (sauf Java) puisque le paradigme est une façon de concevoir et pas une syntaxe, les langages l'illustrant mieux sont plutôt Haskell, OCaml, Erlang, Elixir ...

      2)
      L'OO pareil, c'est un paradigme de programmation. Il te permet de représenter des entités qui vont pouvoir gérer eux-même leur état interne, et fournir des services auprès des appelants.

      -
      Edité par romantik 31 octobre 2018 à 9:16:55

      • Partager sur Facebook
      • Partager sur Twitter
      Dream on, Dream on, Dream until your dream comes true
        31 octobre 2018 à 10:41:32

        totola-tipi a écrit:

        Par exemple Jss est un langage de programmation fonctionnelle côté client, utilisé pour le web, les boutons.....

        JS est objet et pas franchement fonctionnel pour deux ronds.

        romantik a écrit:

        La programmation fonctionnelle te fait concevoir tes développements comme un ensemble de fonction bijective au sens mathématique.

        Euh non o_O :

        let f a b = mod a b

        C'est pas bijectif.

        • Partager sur Facebook
        • Partager sur Twitter

        Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

          31 octobre 2018 à 11:19:52

          Euh c'est pas le mot que je cherchais

          C'est lequel déjà qui signifie "à une abscisse correspond une unique image" ? (parce que bijectif implique également la réciproque "à une image correspond une unique abscisse" n'est-ce pas ?)

          • Partager sur Facebook
          • Partager sur Twitter
          Dream on, Dream on, Dream until your dream comes true
            31 octobre 2018 à 12:36:32

            romantik a écrit:

            C'est lequel déjà qui signifie "à une abscisse correspond une unique image" ? (parce que bijectif implique également la réciproque "à une image correspond une unique abscisse" n'est-ce pas ?)

            Tu peux pas raisonner en terme d'abscisse/ordonnée ici. Pense en termes d'ensembles. Du coup, va voir les notions de injectif, surjectif et bijectif. Mais sinon, les langages à side-effect respectent aussi cette propriété, il y a juste un paramètre implicite supplémentaire qui est l'état actuel de la mémoire, et une sortie résultante supplémentaire qui est la mémoire modifiée ;) .

            • Partager sur Facebook
            • Partager sur Twitter

            Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

              31 octobre 2018 à 16:59:03

              Ksass`Peuk a écrit:

              totola-tipi a écrit:

              Par exemple Jss est un langage de programmation fonctionnelle côté client, utilisé pour le web, les boutons.....

              JS est objet et pas franchement fonctionnel pour deux ronds.

              romantik a écrit:

              La programmation fonctionnelle te fait concevoir tes développements comme un ensemble de fonction bijective au sens mathématique.

              Euh non o_O :

              let f a b = mod a b

              C'est pas bijectif.

               https://perso.liris.cnrs.fr/romuald.thion/files/Enseignement/LIFAP5/LIFAP5-2018P-CM1.pdf

              Page trois.
              • Partager sur Facebook
              • Partager sur Twitter
                31 octobre 2018 à 17:07:07

                Dans les paradigmes listés par https://en.wikipedia.org/wiki/JavaScript, on trouve le fonctionnel, après l'objet. Mais l'utilisation de ce langage est quand même très focalisée sur les sous-paradigmes :

                • l'objet,
                • l'event-driven.

                En particulier, une caractéristique forte de la plupart des langages fonctionnel, c'est le typage. Et JS est très faiblement typé.

                • Partager sur Facebook
                • Partager sur Twitter

                Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

                  6 novembre 2018 à 22:32:07

                  totola-tipi a écrit:

                  J'ai vu que les fonctions sont de premier ordre, et que cela signifie que la valeur de retour d'une fonction peut être affectée, j'ai vu que cela parlé de solution de systèmes différentielles de premier ordre. Java, C , Python C++, R sont donc fonctionnelles.

                  Même si le mode de programmation actuelle adopte de plus en plus des concepts et notions liés à la programmation fonctionnelle, les langages que tu cites ne sont pas considérés comme tel. Un langage fonctionnel, pour compléter un peu ce qui a été dit, c'est surtout un langage qui évite au plus possible les effets de bord. Un effet de bord c'est, en gros, une interaction avec un élément extérieur à un scope donné. Par exemple, l'IO (input / output) produit des effets de bord. Pour restreindre ça, la plupart des langages fonctionnels définissent leurs données comme immuables, c'est-à-dire ne pouvant pas être modifiées. Même si des langages le permettent tout de même.

                  Haskell est complètement immuable, mais utilise le concept de monade pour "pallier" ce problème.

                  A tout cela s'ajoute des features propre à ce paradigme :

                  • Fonctions de première classe ;
                  • Calcule et expression lambda ;
                  • Pattern matching ;
                  • Evaluation paresseuse ;
                  • Memoization ; 
                  • Currying ;
                  • Immuabilité ;
                  • ...

                  Si ces deux paradigmes t'intéresses, il existe des langages dit "hybrides". Qui adoptent à la fois des concepts fonctionnels et orienté objet. Je pense notamment à la famille des langages ML, ou encore à Scala.

                  Mais si tu veux faire du vrai fonctionnel, Haskell est là pour toi ;) Par contre il faut s'accrocher.

                  Bonne continuation ;)

                  PS: Voici une petite image de comparaison OO/FP :

                  -
                  Edité par vanaur 6 novembre 2018 à 23:10:02

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...

                  Programmation fonctionelle et orientée objet

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown