Bienvenue invité ( Connexion | Inscription )

> Java pour les nuls, ou Tecka va tout planter
Tecka
posté 8 Mar 2008, 15:48
Message #1


Boulet on Tour


Groupe : Ancien de la Team
Messages : 6085
Inscrit : 14-Dec-04
Lieu : Blainville sur l'eau
Membre n° 191



C'est le grand jour je me lance, ras le bol de passer pour un gros noob
je me lance dans la programmation mais il faut que je reprenne tout
depuis le début , ma dernière expérience en programmation remonte
à la calculatrice Casio FX850-P. Il me faudrait en premier un environnement
pour faire du Java, vous avez quelque chose de simple et gratos ?
Et si en plus il y a un petit didacticiel c'est encore mieux happy.gif
Sinon des titres de livres genre "le Java pour les nuls".
Merci smile.gif

Edit :Je viens de DL Eclipse 3.3 et NetBeans 6.0.1 wink.gif

Ce message a été modifié par Tecka - 8 Mar 2008, 16:20.


--------------------
CoD4//Black Ops:iClanlTecka
MacPro Xéon Quad 2,66 ghz 6 go de ram ATI Radeon HD 5770 1Go+2 Raptor150Go+500Go
MacBookPro Rétina 15' 2,8 Ghz i7 16Go ram NVIDIA GeForce 650M 1Go
IN VINO VERITAS IN VINAS VERY TÔT
Go to the top of the page
 
+Quote Post
 
Start new topic
Réponse(s)
atarxerxes
posté 6 Oct 2008, 22:35
Message #2


Marathon Man


Groupe : Ancien de la Team
Messages : 10953
Inscrit : 20-Nov-04
Lieu : Paris, XIe
Membre n° 160



Sommaire évolutif et approximatif :
  1. les installations
  2. spécifications de l'application
  3. création de la base et des tables
  4. création du projet Eclipse, mise en place du log
  5. mise en place de l'authentification Tomcat
  6. connexion Java-MySQL
  7. récupérations d'informations dans la base
  8. génération du flux XML des actualités
  9. transformation et affichage du flux XML
  10. construction du modèle des pages HTML
  11. écriture des requêtes de modification/ajout/suppression
  12. écriture des pages de modification/ajout/suppression
  13. prototype + scriptaculous : le javascript fiable, facile et spectaculaire
  14. saisie facile des dates
  15. validation des données saisies
  16. écriture de la servlet publique
  17. génération du flux Atom
Troisième étape : création de la base et des tables

(en passant, les étapes correspondent grosso modo aux étapes que je suis quand je développe une application. Une application même modeste c'est un gros truc (une vingtaine d'heures pour celle là en comptant les recherches sur google et les essais). C'est pour ça qu'il est important de se fixer des petits pas, toujours plus ou moins les mêmes, à réaliser les uns après les autres pour avancer, sinon on a vite fait de partir dans tous les sens sans avancer réellement).


En analysant les spécifications, on peut distinguer plusieurs entités de différentes natures :
- un jeu bien sûr
- un éditeur (Sony, Activision,...)
- un support (Wii, PSP, PS3,...)
- un format (ou territoire) (EU, US, Jap)
- une sortie

Si on s'intéresse aux relations entre ces objets on a d'après les spécifications :
- un jeu a un éditeur unique, mais un éditeur peut produire plusieurs jeux
- un jeu peut sortir sur plusieurs supports, et un support peut accueillir plusieurs jeux
- un jeu, sur un support donné, peut sortir sur plusieurs territoires (une seule fois pour chaque au maximum) et un territoire peut avoir plusieurs jeux différents qui sortent dessus
- une sortie se caractérise donc par un jeu sur un support dans un territoire

En terme relationnels on a donc (par convention N signifie ici "nombre quelconque") :
- jeu-éditeur : relation 1-N (un seul éditeur par jeu, N jeux par éditeur)
- jeu-support : relation N-N (N supports par jeu, N jeux par support)
- jeu-format : relation N-N? En fait le format d'un jeu n'est intéressant pour nous que si le jeu est associé à un support (exemple : sur XBox360 Final Fantasy XIII ne sortira pas au Japon, contrairement à la PS3). Donc :
- jeu-format-support : triplet définissant de manière unique une sortie
(il n'y a pas de solution unique, certaines interprétations des spécifications peuvent être fausses, c'est pour ça qu'il est utile de s'assurer auprès du client à chaque étape qu'on comprend bien son besoin. Ici vu que c'est moi le client je suis d'accord avec moi-même wink.gif)

Une fois qu'on a dégagé ces relations, le plus dur est fait au niveau du design de la base de données.
En effet :
- relation 1-N => l'identifiant de la table unique va se retrouver dans la table N
- relation N-N => une table de liaison intermédiaire entre nos deux tables est nécessaire pour obtenir cette articulation

Ce qui donne :
- une table éditeur toute simple
- une table support toute simple
- une table format toute simple
- une table jeu, comportant l'identifiant de son éditeur
- une table de liaison entre un jeu et un support
- une table de liaison entre un jeu, un support et un format (ce sera notre table "sortie")


Avant d'attaquer nos tables, créons notre base (explications minimales, ne pas hésiter à se manifester si quelque chose bloque !) :
- Vérifier que le démon mysqld est lancé par le prefpane MySQL
- Avec l'application MySQL Administrator, se connecter (root sans mot de passe sur localhost:3306 par défaut)
- Créer un utilisateur (Accounts) videogames (mot de passe videogames)
- Choisir cet utilisateur dans la liste et configurer les hosts (enlever % et ajouter localhost, 127.0.0.1 et le nom de l'ordinateur (mini.local pour moi par exemple) (sur mon image j'ai aussi configuré une plage d'IP (192.168.0.%) pour me connecter à la base depuis mon MacPro pour développer car Eclipse ramait trop sur le mini...)


- Sur l'onglet Catalogs, créer le schéma videogames_db (ne pas tenir compte des tables qu'on voit dans cette image, on va les créer juste après)


- Sur l'ongle users, pour chaque host de l'utilisateur videogames, choisir tous les droits et les ajouter pour le schéma videogames_db


On va ensuite créer les tables par script (en effet graphiquement, par l'application d'administration il y a quelques limitations, en particulier pour la création des dates).
On lance donc l'application MySQL Query Browser et on se connecte comme ceci :


On tape les scripts directement dans un onglet "Query", puis "Execute" pour les exécuter :


En script (My)SQL cela donne :
- table format :
CODE
CREATE TABLE `videogames_db`.`VG_FORMAT` (
`form_id` BIGINT NOT NULL AUTO_INCREMENT,
`form_label` VARCHAR(64) NOT NULL,
PRIMARY KEY (`form_id`)
)
CHARACTER SET utf8;

Explications :
- form_id est l'identifiant de la table, c'est un nombre qui peut être grand (BIGINT), non nul (NOT NULL), qui s'incrémente seul si non spécifié lors d'une insertion de données (AUTO_INCREMENT) et qui sera l'accès privilégié à la table comme moyen de récupération d'une information en particulier (PRIMARY KEY)
- form_label est le nom du format, c'est une chaîne de caractères (64 maximum) qui ne peut être nulle

- table éditeur :
CODE
CREATE TABLE `videogames_db`.`VG_EDITEUR` (
`edit_id` BIGINT NOT NULL AUTO_INCREMENT,
`edit_name` VARCHAR(64) NOT NULL,
PRIMARY KEY (`edit_id`)
)
CHARACTER SET utf8;

Idem format

- jeu :
CODE
CREATE TABLE `videogames_db`.`VG_JEU` (
`jeu_id` BIGINT NOT NULL AUTO_INCREMENT,
`jeu_titre` VARCHAR(128) NOT NULL,
`jeu_editeur_id` BIGINT NOT NULL,
`jeu_description` TEXT,
`jeu_previews` TEXT,
`jeu_tests` TEXT,
`jeu_date_creation` TIMESTAMP NOT NULL,
`jeu_date_modification` TIMESTAMP NOT NULL,
PRIMARY KEY (`jeu_id`)
)
CHARACTER SET utf8;

Explications :
- jeu_id idem
- jeu_titre : le titre du jeu, ne peut être nul
- jeu_editeur_id : notre identifiant caractérisant l'éditeur unique d'un jeu. Ne peut être nul
- jeu_description : texte long (idem pour jeu_previews et jeu_tests qui recevront des liens vers previews et tests)
- jeu_date_creation : date-heure non nulle
- jeu_date_modification : idem jeu_date_creation

- table support :
CODE
CREATE TABLE `videogames_db`.`VG_SUPPORT` (
`supp_id` BIGINT NOT NULL AUTO_INCREMENT,
`supp_label` INT,
PRIMARY KEY (`supp_id`)
)
CHARACTER SET utf8;

Explications : idem tables éditeur et format

- liaison jeu-support :
CODE
CREATE TABLE `videogames_db`.`VG_JEU_SUPP` (
`jesu_jeu_id` BIGINT NOT NULL,
`jesu_supp_id` BIGINT NOT NULL,
`jesu_description` TEXT
)
CHARACTER SET utf8;

Explications :
- jesu_jeu_id : l'identifiant du jeu concerné
- jesu_supp_id : l'identifiant du support concerné
- jesu_description : un petit texte précisant les spécificités du jeu sur le support (ex: compatible Balance Board)

- liaison jeu-support-format :
CODE
CREATE TABLE `videogames_db`.`VG_JEU_SUPP_FORM` (
`jesf_jeu_id` BIGINT NOT NULL,
`jesf_supp_id` BIGINT NOT NULL,
`jesf_form_id` BIGINT NOT NULL,
`jesf_date` TIMESTAMP NULL,
`jesf_description` TEXT
)
CHARACTER SET utf8;

Explications : notre table des sorties
- jesf_jeu_id / jesf_supp_id / jesf_form_id : les identifiants standard
- jesf_date : la date de la sortie, peut-être nulle si la date est encore inconnue
- jesf_description : un petit texte décrivant les spécificités éventuelles de la sortie du jeu sur ce support (ex: pas de sang sur No More Heroes européen)



On va ensuite insérer quelques données pour pouvoir commencer à travailler (commit permet de valider l'insertion de données, rollback permet de les annuler) :
- les formats :
CODE
insert into VG_FORMAT(form_label) values('EU Pal');
insert into VG_FORMAT(form_label) values('US NTSC');
insert into VG_FORMAT(form_label) values('Jap NTSC');
commit;


- les supports :
CODE
insert into vg_support(supp_label) values ('Wii');
insert into vg_support(supp_label) values ('DS');
insert into vg_support(supp_label) values ('Mac');
insert into vg_support(supp_label) values ('PC');
insert into vg_support(supp_label) values ('PS3');
insert into vg_support(supp_label) values ('PS2');
insert into vg_support(supp_label) values ('PSP');
insert into vg_support(supp_label) values ('XBox360');
commit;


- les éditeurs (on ajoutera ultérieurement une page pour administrer cela, pour le moment on se contente d'en mettre quelques uns pour tester tout ça) :
CODE
insert into vg_editeur(edit_name) values('Nintendo');
insert into vg_editeur(edit_name) values('Codemasters');
insert into vg_editeur(edit_name) values('Sega');
insert into vg_editeur(edit_name) values('Konami');
insert into vg_editeur(edit_name) values('Activision');
insert into vg_editeur(edit_name) values('LucasArts');
insert into vg_editeur(edit_name) values('Disney Interactive');
insert into vg_editeur(edit_name) values('505 Games');
insert into vg_editeur(edit_name) values('Square Enix');
insert into vg_editeur(edit_name) values('GOA');
insert into vg_editeur(edit_name) values('Koei');
insert into vg_editeur(edit_name) values('MTV Games');
insert into vg_editeur(edit_name) values('2K Games');
insert into vg_editeur(edit_name) values('EA');
insert into vg_editeur(edit_name) values('Capcom');
insert into vg_editeur(edit_name) values('THQ');
insert into vg_editeur(edit_name) values('Warner Bros. Games');
insert into vg_editeur(edit_name) values('XSeed Games');
insert into vg_editeur(edit_name) values('Microsoft');
insert into vg_editeur(edit_name) values('Sony');
insert into vg_editeur(edit_name) values('Ubisoft');
insert into vg_editeur(edit_name) values('JoWood');
insert into vg_editeur(edit_name) values('Ignition');
insert into vg_editeur(edit_name) values('Bethesda Softworks');
insert into vg_editeur(edit_name) values('Gamecock Media Group');
insert into vg_editeur(edit_name) values('Marvelous');
insert into vg_editeur(edit_name) values('Level5');
insert into vg_editeur(edit_name) values('Atlus');
insert into vg_editeur(edit_name) values('Blizzard');
commit;



[Edit]Un petit mot sur les règles de nommage des tables et colonnes : ça peut sembler chiant ou illisible mais ça fait en fait gagner énormément de temps d'avoir une règle immuable appliquée bêtement. En l'occurrence :
- les tables sont préfixées par un surnom unique pour la base ("vg_")
- les tables d'entités ont un nom lisible, les tables de liaison ont le nom accolé des tables qu'elles lient
- une colonne hérite du nom de la colonne qui la contraint au préfixe de table près (ex : "jesf_jeu_id" pour "jeu_id") (seul contre-exemple : j'aurai du appeler la colonne jeu_editeur_id "jeu_edit_id" pour être cohérent mais ça m'a échappé, tant pis wink.gif)
- les noms de colonnes sont préfixés par quatre lettres (ou moins, cf "jeu") représentatives du nom de la table. De fait tout nom de colonne est unique dans la base, ça évite de devoir lever soi-même les ambiguïtés dans les requêtes SQL.

Ce message a été modifié par atarxerxes - 7 Oct 2008, 07:31.


--------------------
Ordis: iPad 2 16Go 3G ; MacbookAir 11" Core i7 2GHz 8 Go RAM SSD128Go + Dell 2405FPW; Mini C2D2.0GHz media center / Accessoires: Wii , XBox360, PS3, 3DS, iPhone 4 / Télé: Numericable HD Box -> Samsung LE32R51B + Denon AVR-3808 + 5.0 Triangle
About.me
"Je n'ai jamais aimé que moi / Et je reste sans lendemain", H.F. Thiéfaine
"Reality is that which, when you stop believing in it, doesn’t go away", Philip K. Dick
Go to the top of the page
 
+Quote Post

Les messages de ce sujet
- Tecka   Java pour les nuls   8 Mar 2008, 15:48
- - atarxerxes   Sommaire évolutif et approximatif :les installatio...   6 Oct 2008, 22:35
- - atarxerxes   Sommaire évolutif et approximatif :les installatio...   12 Oct 2008, 13:25
- - atarxerxes   Bon, à partir de la prochaine séance on attaque le...   14 Oct 2008, 11:49
- - Heimdal50   Je n´ai pas réussi la création de la base et des t...   14 Oct 2008, 11:54
- - atarxerxes   Alors?   15 Oct 2008, 09:15
- - Heimdal50   My SQL Query Browser a des problèmes avec la comma...   15 Oct 2008, 10:08
- - atarxerxes   Bizarre, peut-être qu'il est en auto-commit et...   15 Oct 2008, 10:34
- - CantKillemAll   Pas le temps en ce moment, mais toujours intéressé...   15 Oct 2008, 12:31
- - Gamoul   pareil pour moi   15 Oct 2008, 14:46
- - Tecka   Merde j'ai loupé un cours je fais ça ce week-e...   16 Oct 2008, 09:20
- - atarxerxes   Sommaire évolutif et approximatif :les installatio...   19 Oct 2008, 11:28
- - DBSor   Powaa, ça se complique et j'ai pas trop le tem...   19 Oct 2008, 12:09
- - atarxerxes   Sommaire évolutif et approximatif :les installatio...   19 Oct 2008, 13:49
|- - Heimdal50   CITATION(atarxerxes @ 19 Oct 2008, 14:49)...   29 Apr 2009, 15:36
- - atarxerxes   Je suis en vacances   29 Apr 2009, 16:14
- - Gamoul   Cool, ça veut dire que tu auras tout ton temps pou...   29 Apr 2009, 16:42
- - DBSor   et maintenant, on fait quoi ?   16 Apr 2012, 14:06
|- - Louis92   CITATION(DBSor @ 16 Apr 2012, 15:06) On ...   16 Apr 2012, 15:39
- - titimoby   ça intéresse toujours du monde ? si atarxerxes n...   17 Apr 2012, 08:37
- - atarxerxes   Pas de problème pour que tu prennes la suite   27 Apr 2012, 07:29
- - titimoby   J'espère avoir à la fois le temps nécessaire e...   28 Apr 2012, 22:14
- - titimoby   Anecdote qui m'enquiquine : jusqu'à mon c...   1 May 2012, 21:56
- - Louis92   Tu dois appuyer en bas à gauche sur la touche ...   2 May 2012, 08:11
- - titimoby   J'ai renoncé, j'ai enlevé mes réglages de ...   2 May 2012, 10:10
- - titimoby   Accessoirement, je n'avais pas mis en place de...   2 May 2012, 10:35
- - Tsukama   Si tout se passe bien pour mes concours, l'ann...   5 May 2012, 09:58
- - RooKMooT Junior   J'ai commencé le java depuis peu et en essayan...   6 May 2012, 14:09
- - Leoric   Il faut mettre "==" pour référer à une c...   6 May 2012, 14:15
- - RooKMooT Junior   Merci, et en plus je viens de regarder et ça par c...   6 May 2012, 19:58
- - DBSor   Comme ça tu ne l'oublieras pas et c'est ta...   6 May 2012, 22:13
2 Pages V  < 1 2


Reply to this topicStart new topic
8 utilisateur(s) sur ce sujet (8 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 2 Oct 2024 - 15:49