Partage
  • Partager sur Facebook
  • Partager sur Twitter

Questions en vrac (Débutant)

    23 juin 2018 à 20:18:40

    Bonjour (ou rebonjour) ! :)

    Je suis le tuto du sdz et il y a quelques points sur lesquels j ai du mal, j aimerai pouvoir les éclaircir :

    Premièrement, au niveau des interfaces. Il y a possibilité de créer des fonctions par defaut avec le mot clé default. Mais quelle est la différence avec le mot clé public dans ce cas ? De plus, je ne comprends pas la syntaxe pour l appel : Interface.super.fonction()

    J ai l impression que cela fonctionne comme les fonctions static, donc je n en voit pas la différence, et j ai du mal a comprendre ce que fait le mot clé super ici

    Ensuite au niveau des exceptions, sur le tuto on nous montre un code source qui ressemble à ça (je suis sur smartphone je ne trouve pas les balises code veuillez m excuser ) :

    ////////

    If(condition1) {throw new exception1} 

    If(condition2) {throw new exception2} 

    Else {déroulement normal } 

    ///////

    Sur ce code, même si l exception 1 est levée, tant que l autre ne l est pas, le corps de 'else' va quand même tourner non ? Comment faire le cas échéant pour que ce code ne s execute pas si l exception 1 est levée ? 

    Enfin, au niveau de l heritage, si le constructeur de la classe mère ne prends pas de paramètres, est-il nécessaire de préciser un 'super()' dans le constructeur de la classe fille ? J ai accès aux attributs de la classe mère quand je ne le mets pas, c'est pour ça que je demande.

    Merci d avance pour la lecture :) 

    -
    Edité par 01001011 23 juin 2018 à 20:19:43

    • Partager sur Facebook
    • Partager sur Twitter
      23 juin 2018 à 20:51:21

      Salut,

      Pour ce qui concerne les exceptions, il faut savoir que les exceptions brisent (plus ou moins) irrémédiablement le flux d'exécution lorsqu'elles sont lancées: si une exception est lancée parce que condition1 est vérifiée, rien(*)  de ce qui suit le lancement de l'exception dans le code ne sera exécuté.

      Ainsi, le else n'est même pas nécessaire et ton code pourrait tout aussi bien prendre la forme de

      if(condition1) {throw new exception1;} 
      if(condition2) {throw new exception2;} 
      //déroulement normal

      parce que les lignes 2 et 3 (et les suivantes) ne seront pas exécutées si exception1 est lancé et que la ligne 3 (et les suivantes, bien sur) ne seront pas exécutées si exception2 est lancée

      (*) En fait, je simplifie un peu trop : S'il existe un block d'instructions finally, il sera forcément exécuté, qu'une exception ait été lancée ou non.

      • Partager sur Facebook
      • Partager sur Twitter
      Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
        23 juin 2018 à 22:50:26

        D accord ce point là est plus clair pour moi merci :)

        Sinon je connaissais le principe de finally donc j ai bien assimiler

        Je reste à l affût sur le sujet pour voir si quelqu un peut répondre aux autres points 

        • Partager sur Facebook
        • Partager sur Twitter
          26 juin 2018 à 12:48:27

          Salut !

          Pour les Interfaces c'est assez subtil les differences avec tout ce que tu as dit, je pense que pour bien comprendre il faut en faire,
          En gros la limite des class abstraite c'est que l'héritage multip^le n'est pas géré en JAVA, alors que tu peux implementer autant d'interface que tu veux.
          ensuite dans une interface la norme est de ne mettre que la premiere ligne de ta methode qui sera defini dans tes class implementant l'interface, sauf que des fois on a une méthode qui est commune a toutes les class alors on la défini directement dans l'interface avec le mot clé default.
          ce n'est pas static car on ne peut pas lancé la methode avec Interface.methode sans créer d'instance, ce n'est pas public car en vérité tu ne defini pas de prive public dans une interface, et ensuite on utilise super comme dans les class heritant d'une autre class qui voudrai utilisé une methode de son ascendance, la ce n'est pas de l'heritage attention ! mais ça fonctionne pareil tes class implementant l'interface utilise une methode default en utilisant le mot clé super comme si elles "héritaient" de l'interface

          J'espere avoir été utile :)

          • Partager sur Facebook
          • Partager sur Twitter
            26 juin 2018 à 17:35:42

            Merci pour ta réponse mais je suis toujours dans le flou par rapport à ça :/

            Je ne comprends toujours pas les nouvelles fonctionnalités des interfaces depuis Java 8

            Je viens du langage C++ a la base et je trouve le Java très fouillis je suis assez perdu je dois dire

            Le fait que ce langage soit si permissif le rend d une incroyable difficulté à comprendre par rapport à C++

            La généricité est une vraie purge à comprendre.

            J ai l impression que des parties sur le tuto ont été retirées 

            Exemple : à aucun moment la forme de boucle for(Obj o : Obj[]) n est abordée dans le cours, pourtant c est celle qu on nous sort à toutes les sauces sans avoir donné d explication à son sujet. Il faut sans cesse parcourir d autres sites pour avoir ne serait-ce qu une definitions de ces multiples notions qui ne sont jamais abordées pourtant utilisées à travers le tuto. A un moment du cours on nous dis qu on vient de créer la class Maison alors que pas du tout, cette class ne fait ni partie des instructions ni du code exemple, et plein d autres boulettes de ce genre.

            Les points les plus obscures sont à peine expliqués (rien sur interface.super.methode()  ) alors qu on perd du temps à éclaircir en détail d autres points qui sont nettement plus évidents(Un paragraphe complet pour expliquer qu une classe mère ne peut pas être castee en class fille) 

            Personne n à un site mieux organisé pour apprendre le Java ? 

            -
            Edité par 01001011 26 juin 2018 à 17:42:47

            • Partager sur Facebook
            • Partager sur Twitter
              27 juin 2018 à 10:18:53

              Oui je suis d'accord avec toi le tuto java n'est pas assez complet et fournis en exemples a mon gout mais bon...
              En Français je peux te conseiller un site qui alterne une leçon un exo a faire directement en ligne
              http://www.france-ioi.org/

              Tu te cré un compte et tu peux commencer les exos en java ;)
              le début est assez long vu que ça part de la base de la base mais tu apprend au fur et a mesure grace aux dizaines d'exercices ;)


              Par contre je ne suis pas d'accord, le java n'est pas si permissif que ça et c'est toujours risqué dans un code de gérer la généricité.
              Perso j'évite au plus quand c'est possible, si tu veux voir un language permissif essai le python ou meme pire le javascript ! :p

              En tout cas pour les interface et la généricité tu ne verras leur interet et leurs subtilité qu'après les avoir utilisé ^^
              Pour t'aider tu peux faire des tutos sur des pattern simple comme le bridge ou le composite qui te feront utilisé les interfaces et gérer les subtilité du language een prennant de bonnes pratiques ;)

              • Partager sur Facebook
              • Partager sur Twitter
                2 juillet 2018 à 12:14:35

                Je te remercie pour ta réponse détaillée
                • Partager sur Facebook
                • Partager sur Twitter

                Questions en vrac (Débutant)

                × 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