- est-ce que le code obtenu par copier-coller est si peu fréquent ?
- Jamais de copier / coller dans le code java, sinon le code
- est-ce qu'on réutilise tant que ça ?
- Oui ! Sinon chaque évolution du code partagé se ferait dans la
- est-ce qu'on crée ou manipule beaucoup de classes abstraites (en
dehors de celles des API standard) ?
- Oui, pour les notions métiers transverses (un contrat par exemple,
- est-ce qu'on redefinit vraiment souvent equals et clone ? etc...
- Oui, le clone pour le copier coller d'objets métiers, par exemple.
salut à tous,
Dans tous les (bons) livres sur java on nous apprend de grands principes
de programmation et leur concrétisation dans ce langage: encapsulation,
abstraction, modularité, factorisation du code, etc...
N'ayant jamais fait de programmation java en équipe, ni sur un gros
projet, je me pose la question suivante: que reste-t-il de ces grands
principes quand on fait de la programmation java dans une entreprise ?
Par exemple:
- est-ce que le code obtenu par copier-coller est si peu fréquent ?
- est-ce qu'on réutilise tant que ça ?
- est-ce qu'on crée ou manipule beaucoup de classes abstraites (en
dehors de celles des API standard) ?
- est-ce qu'on redefinit vraiment souvent equals et clone ? etc...
Pour ne pas que l'on se méprenne, le sens general de ces questions n'est
pas: "à quoi servent toutes ces c....ries abstraites ?", mais plutot:
"que deviennent toutes ces règles de bonne programmation lorsqu'on est
amené à travailler sur un projet complexe, avec des contraintes
importantes de temps et d'efficacité ?"
J'aimerais avoir les temoignages de gens parmi vous qui sont dans cette
situation. Bien sûr je realise que "faire de la programmation java dans
une entreprise" recouvre des réalités très différentes...
Merci (et bravo à tous les participants de ce newsgroup très
enrichissant)
Fred
- est-ce que le code obtenu par copier-coller est si peu fréquent ?
- Jamais de copier / coller dans le code java, sinon le code
- est-ce qu'on réutilise tant que ça ?
- Oui ! Sinon chaque évolution du code partagé se ferait dans la
- est-ce qu'on crée ou manipule beaucoup de classes abstraites (en
dehors de celles des API standard) ?
- Oui, pour les notions métiers transverses (un contrat par exemple,
- est-ce qu'on redefinit vraiment souvent equals et clone ? etc...
- Oui, le clone pour le copier coller d'objets métiers, par exemple.
salut à tous,
Dans tous les (bons) livres sur java on nous apprend de grands principes
de programmation et leur concrétisation dans ce langage: encapsulation,
abstraction, modularité, factorisation du code, etc...
N'ayant jamais fait de programmation java en équipe, ni sur un gros
projet, je me pose la question suivante: que reste-t-il de ces grands
principes quand on fait de la programmation java dans une entreprise ?
Par exemple:
- est-ce que le code obtenu par copier-coller est si peu fréquent ?
- est-ce qu'on réutilise tant que ça ?
- est-ce qu'on crée ou manipule beaucoup de classes abstraites (en
dehors de celles des API standard) ?
- est-ce qu'on redefinit vraiment souvent equals et clone ? etc...
Pour ne pas que l'on se méprenne, le sens general de ces questions n'est
pas: "à quoi servent toutes ces c....ries abstraites ?", mais plutot:
"que deviennent toutes ces règles de bonne programmation lorsqu'on est
amené à travailler sur un projet complexe, avec des contraintes
importantes de temps et d'efficacité ?"
J'aimerais avoir les temoignages de gens parmi vous qui sont dans cette
situation. Bien sûr je realise que "faire de la programmation java dans
une entreprise" recouvre des réalités très différentes...
Merci (et bravo à tous les participants de ce newsgroup très
enrichissant)
Fred
- est-ce que le code obtenu par copier-coller est si peu fréquent ?
- Jamais de copier / coller dans le code java, sinon le code
- est-ce qu'on réutilise tant que ça ?
- Oui ! Sinon chaque évolution du code partagé se ferait dans la
- est-ce qu'on crée ou manipule beaucoup de classes abstraites (en
dehors de celles des API standard) ?
- Oui, pour les notions métiers transverses (un contrat par exemple,
- est-ce qu'on redefinit vraiment souvent equals et clone ? etc...
- Oui, le clone pour le copier coller d'objets métiers, par exemple.
salut à tous,
Dans tous les (bons) livres sur java on nous apprend de grands principes
de programmation et leur concrétisation dans ce langage: encapsulation,
abstraction, modularité, factorisation du code, etc...
N'ayant jamais fait de programmation java en équipe, ni sur un gros
projet, je me pose la question suivante: que reste-t-il de ces grands
principes quand on fait de la programmation java dans une entreprise ?
Par exemple:
- est-ce que le code obtenu par copier-coller est si peu fréquent ?
- est-ce qu'on réutilise tant que ça ?
- est-ce qu'on crée ou manipule beaucoup de classes abstraites (en
dehors de celles des API standard) ?
- est-ce qu'on redefinit vraiment souvent equals et clone ? etc...
Pour ne pas que l'on se méprenne, le sens general de ces questions n'est
pas: "à quoi servent toutes ces c....ries abstraites ?", mais plutot:
"que deviennent toutes ces règles de bonne programmation lorsqu'on est
amené à travailler sur un projet complexe, avec des contraintes
importantes de temps et d'efficacité ?"
J'aimerais avoir les temoignages de gens parmi vous qui sont dans cette
situation. Bien sûr je realise que "faire de la programmation java dans
une entreprise" recouvre des réalités très différentes...
Merci (et bravo à tous les participants de ce newsgroup très
enrichissant)
Fred
Dans tous les (bons) livres sur java on nous apprend de grands principes
de programmation et leur concrétisation dans ce langage: encapsulation,
abstraction, modularité, factorisation du code, etc...
Dans tous les (bons) livres sur java on nous apprend de grands principes
de programmation et leur concrétisation dans ce langage: encapsulation,
abstraction, modularité, factorisation du code, etc...
Dans tous les (bons) livres sur java on nous apprend de grands principes
de programmation et leur concrétisation dans ce langage: encapsulation,
abstraction, modularité, factorisation du code, etc...
Il doit avoir tout un monde entre gérer tout seul un projet de taille
moyenne (pas besoin de EJB en application WEB par exemple) en TPE et
travailler sur un projet énorme en SSII.
Il doit avoir tout un monde entre gérer tout seul un projet de taille
moyenne (pas besoin de EJB en application WEB par exemple) en TPE et
travailler sur un projet énorme en SSII.
Il doit avoir tout un monde entre gérer tout seul un projet de taille
moyenne (pas besoin de EJB en application WEB par exemple) en TPE et
travailler sur un projet énorme en SSII.
jeje900ss wrote:Il doit avoir tout un monde entre gérer tout seul un projet de taille
moyenne (pas besoin de EJB en application WEB par exemple) en TPE et
travailler sur un projet énorme en SSII.
La différence entre TPE et grosse SSII ne se trouve pas forcément dans le
code.
J'ai un client qui m'a demandé de "récupérer" un gros projet codé par une
grosse SSII.
J'avais jamais vu un code aussi pourri, peu performant, buggé de toute ma
vie.
Et pourtant il y avait des tests unitaires.
Je n'ai eu qu'une seule expérience dans une équipe de 40 dév (dont certains
étaient très compétents), j'y ai constaté que plus le nombre de développeur
croit, plus la qualité globale et la maintenabilité du code diminue.
Ce n'est je l'espère pas systématique, mais probablement difficile à éviter
sans un très très bon management des équipes.
Je profite de ce post pour poser une question qui me taraude de plus en
jeje900ss wrote:
Il doit avoir tout un monde entre gérer tout seul un projet de taille
moyenne (pas besoin de EJB en application WEB par exemple) en TPE et
travailler sur un projet énorme en SSII.
La différence entre TPE et grosse SSII ne se trouve pas forcément dans le
code.
J'ai un client qui m'a demandé de "récupérer" un gros projet codé par une
grosse SSII.
J'avais jamais vu un code aussi pourri, peu performant, buggé de toute ma
vie.
Et pourtant il y avait des tests unitaires.
Je n'ai eu qu'une seule expérience dans une équipe de 40 dév (dont certains
étaient très compétents), j'y ai constaté que plus le nombre de développeur
croit, plus la qualité globale et la maintenabilité du code diminue.
Ce n'est je l'espère pas systématique, mais probablement difficile à éviter
sans un très très bon management des équipes.
Je profite de ce post pour poser une question qui me taraude de plus en
jeje900ss wrote:Il doit avoir tout un monde entre gérer tout seul un projet de taille
moyenne (pas besoin de EJB en application WEB par exemple) en TPE et
travailler sur un projet énorme en SSII.
La différence entre TPE et grosse SSII ne se trouve pas forcément dans le
code.
J'ai un client qui m'a demandé de "récupérer" un gros projet codé par une
grosse SSII.
J'avais jamais vu un code aussi pourri, peu performant, buggé de toute ma
vie.
Et pourtant il y avait des tests unitaires.
Je n'ai eu qu'une seule expérience dans une équipe de 40 dév (dont certains
étaient très compétents), j'y ai constaté que plus le nombre de développeur
croit, plus la qualité globale et la maintenabilité du code diminue.
Ce n'est je l'espère pas systématique, mais probablement difficile à éviter
sans un très très bon management des équipes.
Je profite de ce post pour poser une question qui me taraude de plus en
En effet, il me semble que la meilleure pratique de développement
consiste à rendre 1 ou 2 personnes responsables d'un petit programme qui
sera très bien défini au niveau de son service model, de façon à pouvoir
l'intégrer dans un plus gros programme par la suite (en gros de l'Xtreme
prog...).
et aussi, quel est l'impact de ces choix sur temps de développement
En effet, il me semble que la meilleure pratique de développement
consiste à rendre 1 ou 2 personnes responsables d'un petit programme qui
sera très bien défini au niveau de son service model, de façon à pouvoir
l'intégrer dans un plus gros programme par la suite (en gros de l'Xtreme
prog...).
et aussi, quel est l'impact de ces choix sur temps de développement
En effet, il me semble que la meilleure pratique de développement
consiste à rendre 1 ou 2 personnes responsables d'un petit programme qui
sera très bien défini au niveau de son service model, de façon à pouvoir
l'intégrer dans un plus gros programme par la suite (en gros de l'Xtreme
prog...).
et aussi, quel est l'impact de ces choix sur temps de développement
Raphael,En effet, il me semble que la meilleure pratique de développement
consiste à rendre 1 ou 2 personnes responsables d'un petit programme qui
sera très bien défini au niveau de son service model, de façon à pouvoir
l'intégrer dans un plus gros programme par la suite (en gros de l'Xtreme
prog...).
Pour ce qui est d'Extreme Programming: on recommande effectivement que 2
personnes (un binôme) s'occupent ensemble d'une /fonctionnalité/ qui est
formellement définie par un Test de Recette.
La façon la plus appropriée de structurer un programme objet est par
/composants/ et non pas par fonctionnalité.
Donc, la structure d'un programme Java ne reflètera *pas* le découpage
en fonctionnalités, et par conséquent pas l'affectation des tâches de
programmation aux personnes de l'équipe.
La structure par composants aura deux principes:
- minimiser le *couplage* entre les composants
- maximiser la *cohésion* entre les composants
Le couplage, c'est la propriété qu'a un composant d'entraîner, quand on
le modifie, des modifications "en cascade" dans d'autres composants.
Par exemple, imagine que tu as une classe Voiture, une interface Web
pour manipuler des voitures, et une base de données SQL qui stocke les
données. Le commanditaire du projet demande qu'on traite une nouvelle
information sur les voitures (mettons, la consommation aux cent Km). On
peut envisager deux types de scénarios:
- dans le premier, j'ai beaucoup de choses codées "à la main" et "en
dur", du coup il faut que je modifie le schéma SQL; trois écrans HTML
pour prendre en compte le champ "consommation"; trois classes Java qui
traitaient les données des formulaires HTML; et la classe Voiture elle-
même évidemment: tous ces composants sont *fortement couplés*
- dans le second, grâce à l'utilisation de composants plus génériques
(mapping OO-relationnel, générateur de formulaire) il suffit de deux
modifications: ajouter le champ dans la classe Voiture et créer un
"descripteur" qui précise le type du champ, les contraintes de
validation, etc. : la généricité permet un *couplage faible*
La cohésion, c'est le contraire: est-ce que les choses que j'ai rangées
ensemble sont "inséparables", ou bien puis-je envisager de les mettre
dans des modules différents sans entraîner un couplage fort entre ces
modules. Par exemple, si j'ai dans un seul package des classes qui
contiennent des algorithmes métier (calcul de la taxe sur les véhicules)
et d'autres qui s'occupent d'interface graphique (formulaires Web), la
cohésion de ce package est basse. Un module a une cohésion forte quand
il fait "une chose et une seule".et aussi, quel est l'impact de ces choix sur temps de développement
Cohésion élevée et couplage faible égalent développement rapide, jusqu'à
ce qu'on peut appeler "hyperproductivité". C'est ce qui explique le
succès de frameworks comme Ruby On Rails.
Faible cohésion et couplage fort égalent la situation trop connue du
"plat de spaghetti". Nous savons tous ce qu'il en est sur les temps de
développement dans ce scénario: on va vite pendant quelques temps, et
ensuite on se retrouve avec du code non-maintenable et à dire au client
furibard "qu'il faut tout refaire de zéro".
Laurent
Raphael,
En effet, il me semble que la meilleure pratique de développement
consiste à rendre 1 ou 2 personnes responsables d'un petit programme qui
sera très bien défini au niveau de son service model, de façon à pouvoir
l'intégrer dans un plus gros programme par la suite (en gros de l'Xtreme
prog...).
Pour ce qui est d'Extreme Programming: on recommande effectivement que 2
personnes (un binôme) s'occupent ensemble d'une /fonctionnalité/ qui est
formellement définie par un Test de Recette.
La façon la plus appropriée de structurer un programme objet est par
/composants/ et non pas par fonctionnalité.
Donc, la structure d'un programme Java ne reflètera *pas* le découpage
en fonctionnalités, et par conséquent pas l'affectation des tâches de
programmation aux personnes de l'équipe.
La structure par composants aura deux principes:
- minimiser le *couplage* entre les composants
- maximiser la *cohésion* entre les composants
Le couplage, c'est la propriété qu'a un composant d'entraîner, quand on
le modifie, des modifications "en cascade" dans d'autres composants.
Par exemple, imagine que tu as une classe Voiture, une interface Web
pour manipuler des voitures, et une base de données SQL qui stocke les
données. Le commanditaire du projet demande qu'on traite une nouvelle
information sur les voitures (mettons, la consommation aux cent Km). On
peut envisager deux types de scénarios:
- dans le premier, j'ai beaucoup de choses codées "à la main" et "en
dur", du coup il faut que je modifie le schéma SQL; trois écrans HTML
pour prendre en compte le champ "consommation"; trois classes Java qui
traitaient les données des formulaires HTML; et la classe Voiture elle-
même évidemment: tous ces composants sont *fortement couplés*
- dans le second, grâce à l'utilisation de composants plus génériques
(mapping OO-relationnel, générateur de formulaire) il suffit de deux
modifications: ajouter le champ dans la classe Voiture et créer un
"descripteur" qui précise le type du champ, les contraintes de
validation, etc. : la généricité permet un *couplage faible*
La cohésion, c'est le contraire: est-ce que les choses que j'ai rangées
ensemble sont "inséparables", ou bien puis-je envisager de les mettre
dans des modules différents sans entraîner un couplage fort entre ces
modules. Par exemple, si j'ai dans un seul package des classes qui
contiennent des algorithmes métier (calcul de la taxe sur les véhicules)
et d'autres qui s'occupent d'interface graphique (formulaires Web), la
cohésion de ce package est basse. Un module a une cohésion forte quand
il fait "une chose et une seule".
et aussi, quel est l'impact de ces choix sur temps de développement
Cohésion élevée et couplage faible égalent développement rapide, jusqu'à
ce qu'on peut appeler "hyperproductivité". C'est ce qui explique le
succès de frameworks comme Ruby On Rails.
Faible cohésion et couplage fort égalent la situation trop connue du
"plat de spaghetti". Nous savons tous ce qu'il en est sur les temps de
développement dans ce scénario: on va vite pendant quelques temps, et
ensuite on se retrouve avec du code non-maintenable et à dire au client
furibard "qu'il faut tout refaire de zéro".
Laurent
Raphael,En effet, il me semble que la meilleure pratique de développement
consiste à rendre 1 ou 2 personnes responsables d'un petit programme qui
sera très bien défini au niveau de son service model, de façon à pouvoir
l'intégrer dans un plus gros programme par la suite (en gros de l'Xtreme
prog...).
Pour ce qui est d'Extreme Programming: on recommande effectivement que 2
personnes (un binôme) s'occupent ensemble d'une /fonctionnalité/ qui est
formellement définie par un Test de Recette.
La façon la plus appropriée de structurer un programme objet est par
/composants/ et non pas par fonctionnalité.
Donc, la structure d'un programme Java ne reflètera *pas* le découpage
en fonctionnalités, et par conséquent pas l'affectation des tâches de
programmation aux personnes de l'équipe.
La structure par composants aura deux principes:
- minimiser le *couplage* entre les composants
- maximiser la *cohésion* entre les composants
Le couplage, c'est la propriété qu'a un composant d'entraîner, quand on
le modifie, des modifications "en cascade" dans d'autres composants.
Par exemple, imagine que tu as une classe Voiture, une interface Web
pour manipuler des voitures, et une base de données SQL qui stocke les
données. Le commanditaire du projet demande qu'on traite une nouvelle
information sur les voitures (mettons, la consommation aux cent Km). On
peut envisager deux types de scénarios:
- dans le premier, j'ai beaucoup de choses codées "à la main" et "en
dur", du coup il faut que je modifie le schéma SQL; trois écrans HTML
pour prendre en compte le champ "consommation"; trois classes Java qui
traitaient les données des formulaires HTML; et la classe Voiture elle-
même évidemment: tous ces composants sont *fortement couplés*
- dans le second, grâce à l'utilisation de composants plus génériques
(mapping OO-relationnel, générateur de formulaire) il suffit de deux
modifications: ajouter le champ dans la classe Voiture et créer un
"descripteur" qui précise le type du champ, les contraintes de
validation, etc. : la généricité permet un *couplage faible*
La cohésion, c'est le contraire: est-ce que les choses que j'ai rangées
ensemble sont "inséparables", ou bien puis-je envisager de les mettre
dans des modules différents sans entraîner un couplage fort entre ces
modules. Par exemple, si j'ai dans un seul package des classes qui
contiennent des algorithmes métier (calcul de la taxe sur les véhicules)
et d'autres qui s'occupent d'interface graphique (formulaires Web), la
cohésion de ce package est basse. Un module a une cohésion forte quand
il fait "une chose et une seule".et aussi, quel est l'impact de ces choix sur temps de développement
Cohésion élevée et couplage faible égalent développement rapide, jusqu'à
ce qu'on peut appeler "hyperproductivité". C'est ce qui explique le
succès de frameworks comme Ruby On Rails.
Faible cohésion et couplage fort égalent la situation trop connue du
"plat de spaghetti". Nous savons tous ce qu'il en est sur les temps de
développement dans ce scénario: on va vite pendant quelques temps, et
ensuite on se retrouve avec du code non-maintenable et à dire au client
furibard "qu'il faut tout refaire de zéro".
Laurent
Bonjour Laurent,
je suis moi aussi débutant en java (étudiant) et je voulais savoir ce
qu'était le :
- mapping OO-relationnel
- un descripteur
pour le premier je ne sais pas du tout.
pour le descripteur, si je comprends bien (dans votre exemple) c'est
une classe qui va définir les propriétés du nouveau champ de la
classe Voiture, ensuite, l'interface Web n'aura qu'à interroger ce
descripteur pour ajouter automatiquement ce champ dans le formulaire ?
merci !
Bonjour Laurent,
je suis moi aussi débutant en java (étudiant) et je voulais savoir ce
qu'était le :
- mapping OO-relationnel
- un descripteur
pour le premier je ne sais pas du tout.
pour le descripteur, si je comprends bien (dans votre exemple) c'est
une classe qui va définir les propriétés du nouveau champ de la
classe Voiture, ensuite, l'interface Web n'aura qu'à interroger ce
descripteur pour ajouter automatiquement ce champ dans le formulaire ?
merci !
Bonjour Laurent,
je suis moi aussi débutant en java (étudiant) et je voulais savoir ce
qu'était le :
- mapping OO-relationnel
- un descripteur
pour le premier je ne sais pas du tout.
pour le descripteur, si je comprends bien (dans votre exemple) c'est
une classe qui va définir les propriétés du nouveau champ de la
classe Voiture, ensuite, l'interface Web n'aura qu'à interroger ce
descripteur pour ajouter automatiquement ce champ dans le formulaire ?
merci !
Pour le mapping OO-relationnel:
Certaines architectures de bases de données, avec des clés étrangères,
sont dites relationnelles.
Exemple:
1 homme est le père de n enfants
OO fait référence à la prog orientée objet:
la classe Homme contient une liste chainée d'Enfants (une classe elle
aussi)
Donc pour faire le mapping (donc la correspondance entre OO et
relationnel), on peut dire:
Puisque j'ai du côté langage de prog OO, une classe Homme et une classe
Enfant, je ferai du côté relationnel une table Homme et une table
enfants. De plus, une clé étrangère dans la base de données permettra de
modéliser le fait que Homme a n enfants.
Pour le mapping OO-relationnel:
Certaines architectures de bases de données, avec des clés étrangères,
sont dites relationnelles.
Exemple:
1 homme est le père de n enfants
OO fait référence à la prog orientée objet:
la classe Homme contient une liste chainée d'Enfants (une classe elle
aussi)
Donc pour faire le mapping (donc la correspondance entre OO et
relationnel), on peut dire:
Puisque j'ai du côté langage de prog OO, une classe Homme et une classe
Enfant, je ferai du côté relationnel une table Homme et une table
enfants. De plus, une clé étrangère dans la base de données permettra de
modéliser le fait que Homme a n enfants.
Pour le mapping OO-relationnel:
Certaines architectures de bases de données, avec des clés étrangères,
sont dites relationnelles.
Exemple:
1 homme est le père de n enfants
OO fait référence à la prog orientée objet:
la classe Homme contient une liste chainée d'Enfants (une classe elle
aussi)
Donc pour faire le mapping (donc la correspondance entre OO et
relationnel), on peut dire:
Puisque j'ai du côté langage de prog OO, une classe Homme et une classe
Enfant, je ferai du côté relationnel une table Homme et une table
enfants. De plus, une clé étrangère dans la base de données permettra de
modéliser le fait que Homme a n enfants.