IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

[Avis] Faire du C quand on connait java


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut [Avis] Faire du C quand on connait java
    Bonjour à tous,

    je développe en Java depuis 1 an suite à une licence d'informatique, mais mon parcours professionnel avant de reprendre mes études était orienté en électronique.

    Ma question est la suivante :

    on me propose un poste où il faut connaitre le langage C.
    Je ne connais que html, un peu le PHP, et surtout Java.
    Cela vou sparait-il difficile d'appréhender le C en connaissant Java ?

    Comment fonctionne un programme C sachant que ce n'est pas du POO et que je ne conçois que en POO depuis toujours ?

    Merci pour vos avis et votre soutien !

    [ Modéré par Viena ]
    Ajout d'un tag et modification du titre : Pour la compréhension de tous, utilisez un titre clair et les tags ! merci.

    Les Règles du Forum
    L'interêt du doute est que cela fait avancer.
    (parenthèses)Je suis à la recherche d'un emploi sur Valence(26) et ses environs.
    mon cv:
    http://charegis.netcv.org/

  2. #2
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    bonjour,
    moi j'ai fait le parcours inverse, partant de Pascal, puis C, LTR3, Ada, pour arriver en C++ (un peu...) et enfin à Java.
    C est un langage structurellement plus simple que Java, dans la mesure où il n'y a pas de classe, pas d'objets, pas d'héritage, pas d'instanciation, c'est donc un langage entièrement procédural : l'unité de traitement est la fonction.
    Une fonction prend des données en entrée, effectue au besoin des effets de bord, et restitue éventuellement une valeur. Une fonction n'est pas attachée à un objet. C'est évidemment une énorme différence par rapport au paradigme objet.
    Un fichier source C se compose de déclarations de types, de variables, de fonctions. Pour la visibilité, on n'a pas trop le choix : tout est soit "public", soit "private". Contrairement à Java qui définit au sein d'un seul fichier source toutes les caractéristiques d'une classe (propriétés et méthodes privés, publiques, ...), en C, à côté du fichier source (d'extension .c), on trouve généralement un fichier d'inclusion (d'extension .h) qui répertorie les types, variables, fonctions que l'on souhaite rendre disponibles (publiques) aux autres fichiers sources de l'application. Ce fichier joue le rôle d'interface publique du source. Donc c'est un peu plus embêtant qu'en Java.
    Bon ensuite, côté programmation, le plus gros hic est la syntaxe quelque peu absconse des déclarations de variable ou de type (en moins de 10s, que signifie un int *(*p)[10] ?), l'équivalence adresse de tableau - pointeur, la gestion explicite des pointeurs et leur arithmétique sous-jacente, la gestion explicite de la mémoire à coût de malloc() et free(), et tout plein de pièges qu'on apprend à connaître au fur et à mesure de l'expérience...
    Mais on peut concevoir objet et réaliser une implémentation qui en respecte certains traits (encapsulation des données, types abstraits) mais évidemment pas tous (héritage, polymorphisme).
    Ah oui, également, les types primitifs entiers (char, short, int, long) n'ont pas forcément la même taille selon le compilateur, l'OS...
    Bon courage !

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    La syntaxe et une bonne partie de la grammaire des 2 languages sont similaires (en simplifiant : Java dérive du C++ qui dérive du C), c'est déjà ca.

    Tu vas devoir apprendre qq mot clé supplémentaires nottement ceux du préprocesseur.
    Tu vas devoir essayer de comprendre un nouveau concept : les pointeurs.
    Et aussi faire de l'allocation/désallocation manuelle de la mémoire avec malloc et free.

    Quant à la programmation non-POO c'est simple : c'est comme si toutes les méthodes étaient statiques et se situaient dans l'espace de nommage racine (package sans nom) et non pas dans l'espace de nommage d'une classe.
    Les struct sont l'équivalent de classe basiques où tous les membres sont public et ou il n'y a aucune méthode.

    Java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class Toto {
      public String name;
      public String surname;
      public int age;
    }
    C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct Toto {
      char* name;
      char* surname;
      int age;
    };
    La plupart du temps le code est séparé en 2 fichiers distincts : le header ou interface qui est un fichier toto.h et le code ou implémentation qui est un fichier toto.c. L'une des premières lignes de toto.c est en général :

    Le mieux est encore d'essayer toi-même à programmer en C il doit bien y avoir qq didacticiels qq part. Si tu es sous Unix/Linux tu devrais déjà avoir accès à GCC. Si tu es sous Windows tu peux installer Cygwin (un bash sous Windows avec une distro similaire à Linux) qui contient GCC ou Minwg qui est le port natif Windows. Il y a d'autres compilateur C/C++ gratuits (mais en général sans IDE). Pour éditer le code un simple éditeur de texte suffit.

    Prog de base en Java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class Hello {
      public static void main(String[] args) {
        System.out.println("Hello World!");
      }
    }
    Prog de base en C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main&#40;int argc, char** argv&#41; &#123;
      printf&#40;"Hello World!\n"&#41;;
      return EXIT_SUCCESS;
    &#125;
    Le #include est une directive du prepocesseur qui demande l'inclusion (littéralement la recopie) des 2 header de base de la lib C dans ton code avant la phase de compilation. Cela permet d'utiliser les fonctions, macros, variables et types définis dans ces 2 headers. C'est différent d'un import Java (qui se rapproche plus d'un using namespace en C++).

    La compilation d'un programme se fait en général en 2 phases distinctes :
    - la génération des fichiers objets : utiliser toto.h + toto.c + tous les header inclus pour créer une forme compilée toto.o.
    - la phase de linkage pour former l'exécutable final : prendre les bouts de code nécessaire dans tous les .o générés ainsi que dans les lib statiques et/ou faire des références aux lib dynamiques.

    Après pour le reste n'hésite pas à poster dans le forum C/C++ où tu trouveras plus facilement de l'aide sur ce language.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Membre actif Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Points : 214
    Points
    214
    Par défaut
    tu peux t'amuser à faire du C orienté objet aussi (struct assez complexes).
    Moi j'ai une autre question: c'est quoi la boite qui te propose ce poste, j'aimerai y postuler?
    Colère et Haine mènent à la Puissance

  5. #5
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    503
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 503
    Points : 445
    Points
    445
    Par défaut
    Citation Envoyé par keil
    Moi j'ai une autre question: c'est quoi la boite qui te propose ce poste, j'aimerai y postuler?
    LOOOL
    C'est ADECCO pour une boite sur la région de Valence...
    Mon CDD se termine dans 3 mois et il faut bien que je bosse, donc ben j'ai postulé pour ce poste qui est plus proche de l'électronique que de l'informatique, mais bon...il faut bien manger.
    Poste :"Technicien Tests".

    En tout cas merci à tous pour votre coup de main, le langage C ne m'a pas l'air inattaquable...ce n'est qu'une différence de synthaxe et de conception.
    L'interêt du doute est que cela fait avancer.
    (parenthèses)Je suis à la recherche d'un emploi sur Valence(26) et ses environs.
    mon cv:
    http://charegis.netcv.org/

  6. #6
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    euh... sans oublier les pointeurs qui sont indispensables...

  7. #7
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Franchement, en sortant de Java, tu devrais te mettre au C sans trop de problème.
    C'est un peu comme si toutes tes variables et tes méthodes étaient statiques. Et les pointeurs, c'est comme un type de variable sur lequel tu peux faire des incrémentations. Un peu plus d'équivalence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    JAVA
    public class Toto &#123;
      private String phrase;
      public Toto&#40;String phrase&#41; &#123;this.phrase = phrase;&#125;
      public void parle&#40;&#41; &#123; System.out.println&#40;phrase&#41;; &#125;
    &#125;
     
    JAVA QUI RESSEMBLE A DU C
    public class Toto &#123;
      public String phrase;
     
      public static Toto createToto&#40;String phrase&#41; &#123;
        Toto t = new Toto&#40;&#41;;
        t.phrase = phrase;
        return t;
      &#125;
     
      public static void parle&#40;Toto t&#41; &#123;System.out.println&#40;t.phrase&#41;;&#125;
    &#125;
     
    C QUI RESSEMBLE A DU JAVA
    struct Toto &#123;
      char* phrase;
    &#125;
     
    struct Toto* create_toto&#40;char* phrase&#41; &#123;
      struct Toto* t = malloc&#40;sizeof&#40;struct Toto&#41;&#41;;
      t->phrase = phrase;
      return t;
    &#125;
     
    void parle&#40;Toto* t&#41; &#123;
      printf&#40;"s", t->phrase&#41;;
    &#125;
     
    C
    struct Toto &#123;
      char* phrase;
    &#125;
     
    struct Toto createToto&#40;char* phrase&#41; &#123;
      Toto t;
      str_cpy&#40;phrase, t->phrase&#41;;
      return t;
    &#125;
     
    void parle&#40;Toto t&#41; &#123;
      printf&#40;"s", t.phrase&#41;;
    &#125;
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  8. #8
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Citation Envoyé par xavlours
    Franchement, en sortant de Java, tu devrais te mettre au C sans trop de problème.
    Je ne suis pas vraiment d'accord mais bon chacun son point de vue... Il faut être extrêmement rigoureux en C pour gérer correctement les pointeurs (en particulier pour éviter les fuites mémoire). Java te masque cette complexité par l'utilisation de références (qu'on peut voir comme des pointeurs sécurisés) et du GC.
    Par exemple, le code suivant a un comportement indéfini (ça se termine mal en général) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char *f&#40;int n&#41; &#123;
      char buffer&#91;100&#93;;
      sprintf&#40;buffer, "%d", n&#41;;
      return buffer;
    &#125;
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    struct Toto &#123;
      char* phrase;
    &#125;
     
    struct Toto createToto&#40;char* phrase&#41; &#123;
      Toto t;
      str_cpy&#40;phrase, t->phrase&#41;;
      return t;
    &#125;
    Et voilà, premier programme en C, premier(s) bug(s) !
    Il ne faut pas écrire t->phrase mais t.phrase car t n'est pas un pointeur mais une variable de type "struct"
    De plus, tu as oublié d'allouer l'espace mémoire pour t.phase ... qui de plus n'est pas initialisé (bonjour le strcpy, ça sent le Memory Fault).... et le format du printf est %s

  9. #9
    Membre actif Avatar de keil
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    261
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 261
    Points : 214
    Points
    214
    Par défaut
    merci pour le nom de la boîte ... d'intérim
    Colère et Haine mènent à la Puissance

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    940
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 940
    Points : 1 816
    Points
    1 816
    Par défaut
    Le gros morceau à maîtriser est les pointeurs. Ce message "opération non conforme" qui revient tout le temps sous Windows? 9 fois sur 10, une bétise avec les pointeurs.

    La plus grande différence est la différence de philosophie. C est un langage fonctionnel, Java un langage objet. Cela suppose une autre méthode de développement. C se concentre plus sur les scénarios que les données.

    Mieux vaut prévoir deux semaines pour apprendre et expérimenter.

  11. #11
    NGY
    NGY est déconnecté
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    J'ai refais un peu de C récemment. Franchement, quelle misère !
    C'est quand même 100 fois moins lisible (même si c'est bien écrit) que Java.

    Ce qui m'a le plus dérangé : la gestion des chaînes de caractères. Si le programme utilise assez fréquemment des chaînes, ça devient vite pénible quand on a plus l'habitude.

  12. #12
    Rédacteur en Chef
    Avatar de Marc Lussac
    Homme Profil pro
    Responsable marketing opérationnel
    Inscrit en
    Mars 2002
    Messages
    28 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable marketing opérationnel
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2002
    Messages : 28 664
    Points : 61 530
    Points
    61 530
    Par défaut
    En effet, si tu sais faire du java je ne voie pas pourquoi tu ne pourrais pas faire du C.

    Donc du C tu peux en faire, maintenant que tu y prenne plaisir après avoir fait du java ca c'est une autre histoire
    Ne pas me contacter pour le forum et je ne répondrai à aucune question technique. Pour contacter les différents services du club (publications, partenariats, publicité, ...) : Contacts

    15 000 offres d'emploi développeurs et informatique
    Cours et tutoriels développeurs et informatique
    Les FAQ's & Les Livres
    Codes sources
    Téléchargements

  13. #13
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par BugFactory
    Le gros morceau à maîtriser est les pointeurs. Ce message "opération non conforme" qui revient tout le temps sous Windows? 9 fois sur 10, une bétise avec les pointeurs.

    La plus grande différence est la différence de philosophie. C est un langage fonctionnel, Java un langage objet. Cela suppose une autre méthode de développement. C se concentre plus sur les scénarios que les données.

    Mieux vaut prévoir deux semaines pour apprendre et expérimenter.
    C n'est absolument pas un langage fonctionnel, (Lisp est le plus connu) mais un langage impératif qui n'utilise que des fonctions.
    Comme il a déjà été dit, les grosses difficultés que tu vas rencontrer en C ce sont la gestion des pointeurs et des chaînes de caractères, en étant très rigoureux, on s'en sort très bien. Quand tu seras expérimenté, tu pourras simuler les classes avec des structures, mais attention ce n'est quand même pas comme le C++.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  14. #14
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    940
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 940
    Points : 1 816
    Points
    1 816
    Par défaut
    Trap D a écrit :
    C n'est absolument pas un langage fonctionnel, (Lisp est le plus connu) mais un langage impératif qui n'utilise que des fonctions.
    Oups, j'ignorai que "langage fonctionnel" avait une signification précise. Je voulais dire que C est à base de fonctions plutôt que d'objets.

    Et je ferai bien de jeter un coup d'oeil à Lisp, je suis curieux maintenant.

  15. #15
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Tu as tout à fait raison, Lisp et ses confrères proposent une manière d'envisager la programmation d'une façon très différente des langages impératifs que tout informaticien devrait connaître.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  16. #16
    Membre confirmé Avatar de anitshka
    Inscrit en
    Mai 2004
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 624
    Points : 605
    Points
    605
    Par défaut
    Pour ma part je pense qu'il est plus facile de passer du C au Java que le contraire... en effet, avec le java on devient vite feignant sur la gestion des pointeurs, de la mémoire...

    donc la base de l'apprentissage sera rapide (structure assez semblable...) mais dès que tu tomberas sur des choses un peu plus complexes du type gestion de tableau... la ca devient plus chaud ... mais c'est comme tout, c'est plus une histoire d'habitude que de grosses difficultés...

    donc si tu n'as pas trop le choix, fonce de toute façon ca fera un sacré bonus a ton CV pour la suite... et comme tu l'a dis, il faut bien manger!
    Ni Dieu, ni maître, mais des frites bordel!

  17. #17
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Citation Envoyé par herve91
    Et voilà, premier programme en C, premier(s) bug(s) !
    Il ne faut pas écrire t->phrase mais t.phrase
    ...
    et le format du printf est %s
    Tout a fait, j'avoue mon crime ... la syntaxe c'est pas mon fort, parfois je soupçonne mon clavier de dyslexie ...
    Citation Envoyé par herve91
    De plus, tu as oublié d'allouer l'espace mémoire pour t.phase ... qui de plus n'est pas initialisé (bonjour le strcpy, ça sent le Memory Fault)
    Il me semble très fortement que str_cpy s'occupe du malloc (initialisation, allocation) si il y en a besoin.

    Le C (comme le Java) a ses domaines ou le débutant n'arrivera à rien sans beaucoup d'efforts, simplement ce ne sont pas les memes (la gestion mémoire est en effet très ch...te).

    Sur ce, désolé du retour tardif dans la conversation, et merci pour les corrections !
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

Discussions similaires

  1. Apprendre J2EE quand on connait bien le java
    Par pilou0013 dans le forum Développement Web en Java
    Réponses: 8
    Dernier message: 08/12/2009, 19h30
  2. SqlException quand j utilise Java -jar
    Par parou dans le forum NetBeans
    Réponses: 1
    Dernier message: 03/10/2006, 13h01
  3. Réponses: 5
    Dernier message: 24/09/2005, 21h31
  4. [Son] Faire des bruits avec une application java
    Par mammistegon dans le forum Multimédia
    Réponses: 6
    Dernier message: 22/01/2005, 18h17
  5. [votre avis m'interesse] Interface avec un programme Java
    Par LineLe dans le forum Interfaces Graphiques en Java
    Réponses: 29
    Dernier message: 11/12/2004, 12h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo