Débutant Java
Etienne Gauthier
-
etienne -
etienne -
Bonjour à tous, et merci à ceux qui aident les autres et qui voudront bien m'aider aussi
Voilà, je fais des études en maths appliquées, et donc on touche un peu à l'info sans en faire notre matière principale. On a un projet à développer en Java, langage que nous avons découvert dans son ensemble il y a peu de tps. Je suis relativement habitué à manipuler des programmes non orienté objet, et ce n'est pas la syntaxe de java qui m'effraie le plus, c'est justement le coté orienté objet, et plus précisemment la philosophie, le style de programmation qui sont cachés derrière tout ça. Je m'explique, je rentre pas dans les détails mais en gros le prg est une simulation d'ascenseur :un immeuble avec qqes ascenseurs et des clients qui apparaissent à un étage, vont à un autre étage en prenant l'ascenseur (quels feignasses) et disparaissent ensuite. On nous a demandé de programmer un moteur de décisions qui décide quel ascenseur va à quel endroit...
Le genre de questions qu'on est amené à se poser et qui me fais penser qu'on a pas acquis la notion de programmation orientée objet serait par exemple: Doit mettre un identifiant dans la classe client? (un compteur pour distinguer un client d'un autre...) Idem pour les ascenseurs?
Si c'est pour donner un nom ou un identificateur à chaque instance de classe, je perçois pas trop l'intérêt du langage orientée objet (à par faire une interface graphique avec des boutons mais ça n'est pas vraiment de la programmation ça..)
Bref, je suis à un stade ou je sais ce qu'est un objet, je sais même définir un objet, mais ne sais pas comment le manipuler, comment faire interagir les objets entre eux...
J'espère que certains d'entre vous pourront me répondre
Merci d'avance
Voilà, je fais des études en maths appliquées, et donc on touche un peu à l'info sans en faire notre matière principale. On a un projet à développer en Java, langage que nous avons découvert dans son ensemble il y a peu de tps. Je suis relativement habitué à manipuler des programmes non orienté objet, et ce n'est pas la syntaxe de java qui m'effraie le plus, c'est justement le coté orienté objet, et plus précisemment la philosophie, le style de programmation qui sont cachés derrière tout ça. Je m'explique, je rentre pas dans les détails mais en gros le prg est une simulation d'ascenseur :un immeuble avec qqes ascenseurs et des clients qui apparaissent à un étage, vont à un autre étage en prenant l'ascenseur (quels feignasses) et disparaissent ensuite. On nous a demandé de programmer un moteur de décisions qui décide quel ascenseur va à quel endroit...
Le genre de questions qu'on est amené à se poser et qui me fais penser qu'on a pas acquis la notion de programmation orientée objet serait par exemple: Doit mettre un identifiant dans la classe client? (un compteur pour distinguer un client d'un autre...) Idem pour les ascenseurs?
Si c'est pour donner un nom ou un identificateur à chaque instance de classe, je perçois pas trop l'intérêt du langage orientée objet (à par faire une interface graphique avec des boutons mais ça n'est pas vraiment de la programmation ça..)
Bref, je suis à un stade ou je sais ce qu'est un objet, je sais même définir un objet, mais ne sais pas comment le manipuler, comment faire interagir les objets entre eux...
J'espère que certains d'entre vous pourront me répondre
Merci d'avance
A voir également:
- Débutant Java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
7 réponses
Salut
question assez vaste, mais bon je vais résumer.
Les objets peuvent collaborer entre eux (appel de méthodes, passage d'arguments).
Les objets peuvent contenir des objets (dans des structures de données par ex).
Les objets peuvent créer d'autre objets(instancier).
Par exemple: L'objet "voiture" contient un objet "volant" (il contient), il peut demander à son objet volant de tourner (collaboration).
public class Volant{
public void tourne(string direction){}
}
public class Voiture {
private Volant monVolant; "(il contient)"
public Voiture (){ "(constructeur)
monVolant = new Volant(); "(instanciation)"
}
private void jeBraque(String direction){
monVolant.tourne(direction) "(appel d'un méthode et passage d'argument)"
}
----------------
bon ça vaut ce que ça vaut, mais je résume là
Chouba
Casque Bleu forumique
question assez vaste, mais bon je vais résumer.
Les objets peuvent collaborer entre eux (appel de méthodes, passage d'arguments).
Les objets peuvent contenir des objets (dans des structures de données par ex).
Les objets peuvent créer d'autre objets(instancier).
Par exemple: L'objet "voiture" contient un objet "volant" (il contient), il peut demander à son objet volant de tourner (collaboration).
public class Volant{
public void tourne(string direction){}
}
public class Voiture {
private Volant monVolant; "(il contient)"
public Voiture (){ "(constructeur)
monVolant = new Volant(); "(instanciation)"
}
private void jeBraque(String direction){
monVolant.tourne(direction) "(appel d'un méthode et passage d'argument)"
}
----------------
bon ça vaut ce que ça vaut, mais je résume là
Chouba
Casque Bleu forumique
Merci de ta réponse
je n'y vois un peu plus clair, mais tu m'as mis en gros les même choses qu'on voit en cours et dans des bouquins et sur internet.
Pour faire simple, est ce que selon toi, les clients auraient besoin d'un identificateur? un simple compteur qui s'incrémente à chaque nouveau client créé, et j'ai oublié de préciser que ces clients étaient généré aléatoirement, il est donc impossible de prévoir combien il y en aura. Ce qui me parait évident (pas évident mais facile) c'est qu'en programmation classique, la réponse a ma question serait de gérer les clients avec une liste dynamique et pointeur et tout le toutim... Seulement je sais pas pourquoi, j'arrive pas à comprendre comment gérer ça en Java, tu me diras il suffit peut etre d'essayer et puis ça viendra mais je suis sceptique quand à l'utilisation des identificateurs. ..
Merci beaucoup chewie
je n'y vois un peu plus clair, mais tu m'as mis en gros les même choses qu'on voit en cours et dans des bouquins et sur internet.
Pour faire simple, est ce que selon toi, les clients auraient besoin d'un identificateur? un simple compteur qui s'incrémente à chaque nouveau client créé, et j'ai oublié de préciser que ces clients étaient généré aléatoirement, il est donc impossible de prévoir combien il y en aura. Ce qui me parait évident (pas évident mais facile) c'est qu'en programmation classique, la réponse a ma question serait de gérer les clients avec une liste dynamique et pointeur et tout le toutim... Seulement je sais pas pourquoi, j'arrive pas à comprendre comment gérer ça en Java, tu me diras il suffit peut etre d'essayer et puis ça viendra mais je suis sceptique quand à l'utilisation des identificateurs. ..
Merci beaucoup chewie
Un objet n'est que le mode d'emploi d'un ensemble d'attribut.
Pour utiliser un objet, il faut l'instancier, c'est à dire faire qqchose du type :
Client monClient = new Client();
Un autre client serait instancié de la même manière mais ce serait une instance différente :
Client monClient2 = new Client();
Là tu as deux client bien distinct qui sont bien 2 instances d'un même objet. Le Client "monClient" aura les mêmes attributs que "monClient2" mais ces attributs pourront avoir des valeurs différentes.
Toute la difficulté pour toi, c'est de gérer ces instances sans leur donner de nom, car tu ne sais pas d'avance le déroulement de l'opération.
Tu peux gérer l'ensemble de tes clients dans une List (par exemple...) qui contiendra toutes tes instances différentes de ton objet Client :
List mesClients = new List();
Quand un client arrive :
mesClients.add(newClient()); --> quand tu fait "new Client()" ici, il faut imaginer que dans les parenthèses, tu auras toutes les caractéristiques de ton clients (se référer au constructeur)
Un deuxième client arrive :
mesClients.add(newClient()); --> A ce moment, tu as fait deux fois cette instruction, tu as donc deux instances de Client dans ton instance de List. Donc si tu fait mesClients.get(0) tu récupère le premier, si tu fait mesClients.get(1) tu récupère mon second.
Bon là je pars dans tous les sens... donc j'arrête ici... Si tu as des questions ou que je ne suis pas clair, n'hésites pas.
Pour utiliser un objet, il faut l'instancier, c'est à dire faire qqchose du type :
Client monClient = new Client();
Un autre client serait instancié de la même manière mais ce serait une instance différente :
Client monClient2 = new Client();
Là tu as deux client bien distinct qui sont bien 2 instances d'un même objet. Le Client "monClient" aura les mêmes attributs que "monClient2" mais ces attributs pourront avoir des valeurs différentes.
Toute la difficulté pour toi, c'est de gérer ces instances sans leur donner de nom, car tu ne sais pas d'avance le déroulement de l'opération.
Tu peux gérer l'ensemble de tes clients dans une List (par exemple...) qui contiendra toutes tes instances différentes de ton objet Client :
List mesClients = new List();
Quand un client arrive :
mesClients.add(newClient()); --> quand tu fait "new Client()" ici, il faut imaginer que dans les parenthèses, tu auras toutes les caractéristiques de ton clients (se référer au constructeur)
Un deuxième client arrive :
mesClients.add(newClient()); --> A ce moment, tu as fait deux fois cette instruction, tu as donc deux instances de Client dans ton instance de List. Donc si tu fait mesClients.get(0) tu récupère le premier, si tu fait mesClients.get(1) tu récupère mon second.
Bon là je pars dans tous les sens... donc j'arrête ici... Si tu as des questions ou que je ne suis pas clair, n'hésites pas.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
En fait en programmant, ça viens un peu..
Il y a par contre une grosse difficulté dans le projet (à mon avis) (et je ne vous demande pas une réponse précise mais plutot un conseil ou une orientation) c'est qu'il faut dans cette simulation d'ascenseur gérer le facteur "temps". En effet les ascenseurs mettent un certain temps à arriver (ils ont des vitesses..je passe les détails) et le temps défile comme le temps dans une journée (par ex les clients n'arrivent pas à la même fréquence le matin que le midi etc...)
Donc je me demandais comment gérer cet aspect; doit on faire une classe horloge? (un thread qui donne l'heure)
Quels moyens sont disponibles en Java pour simuler le temps?
Merci beaucoup
Il y a par contre une grosse difficulté dans le projet (à mon avis) (et je ne vous demande pas une réponse précise mais plutot un conseil ou une orientation) c'est qu'il faut dans cette simulation d'ascenseur gérer le facteur "temps". En effet les ascenseurs mettent un certain temps à arriver (ils ont des vitesses..je passe les détails) et le temps défile comme le temps dans une journée (par ex les clients n'arrivent pas à la même fréquence le matin que le midi etc...)
Donc je me demandais comment gérer cet aspect; doit on faire une classe horloge? (un thread qui donne l'heure)
Quels moyens sont disponibles en Java pour simuler le temps?
Merci beaucoup
Salut
Tu peux utiliser l'horloge du système pour calculer temps
La classe System possède une méthode "currentTimeMillis() qui te donne l'heure en milliseconde, il suffit d'effectuer un calcul dessus pour gérer les délais
http://java.sun.com/j2se/1.4.1/docs/api/java/lang/System.html
Chouba
Casque Bleu forumique
Tu peux utiliser l'horloge du système pour calculer temps
La classe System possède une méthode "currentTimeMillis() qui te donne l'heure en milliseconde, il suffit d'effectuer un calcul dessus pour gérer les délais
http://java.sun.com/j2se/1.4.1/docs/api/java/lang/System.html
Chouba
Casque Bleu forumique
Ouais on doit pouvoir se débrouiller à partir de là
le but est de simuler une journée de travail (c'est un immeuble de bureau :) et cette journée ne durera pas une journée justement (sinon on se ferait chier à deboguer..). Il faut définir une unité de temps pour le programme (disons la minute) et faire en sorte qu'à chaque seconde (réelle) il se passe une minute dans le programme (le rapport n'est pas obligatoirement celui-ci mais c'est un exemple simple)
merci beaucoup encore une fois, ce forum est très sympathique
je reviendrai :-p
le but est de simuler une journée de travail (c'est un immeuble de bureau :) et cette journée ne durera pas une journée justement (sinon on se ferait chier à deboguer..). Il faut définir une unité de temps pour le programme (disons la minute) et faire en sorte qu'à chaque seconde (réelle) il se passe une minute dans le programme (le rapport n'est pas obligatoirement celui-ci mais c'est un exemple simple)
merci beaucoup encore une fois, ce forum est très sympathique
je reviendrai :-p
On a commencé ce super projet, et j'ai fais un truc (qui me semble à peine correcte) et j'aimerais avoir un avis d'expert. Pour le moment, j'ai 2 classes à savoir une classe horloge (qui simule l'heure de la journée en incrémentant un compteur de minute) et une classe générateur (qui génère des clients). Ces 2 classes sont des Threads (extends Thread).
Le pb que j'avais c'était que j'ai besoin de l'heure à laquelle apparaissent les clients (donc en gros, le générateur a besoin de l'horloge) . Mais ne pouvant pas passer une variable horloge en paramètre dans la méthode run() du générateur, j'ai déclaré une variable de classe (pour le générateur) qui est une instance d'horloge. Et dans le main, l'horloge est lancée en premier puis le générateur est lancé avec en paramètre: l'horloge qui vient d'être instanciée, et dans le constructeur du générateur j'ai rajouté (horlogeDuGenerateur=horlogeDuMain) ce qui me permet d'exploité les données de l'horloge dans le run sans avoir à le passer en paramètre.
Oulala j'espère que j'ai été clair, mais je sais qu'il y a des experts.
Voilà j'aimerais savoir si cette possibilité n'est pas trop laide ni problématique et s'il y a d'autres possibilités.
Merci d'avance
Le pb que j'avais c'était que j'ai besoin de l'heure à laquelle apparaissent les clients (donc en gros, le générateur a besoin de l'horloge) . Mais ne pouvant pas passer une variable horloge en paramètre dans la méthode run() du générateur, j'ai déclaré une variable de classe (pour le générateur) qui est une instance d'horloge. Et dans le main, l'horloge est lancée en premier puis le générateur est lancé avec en paramètre: l'horloge qui vient d'être instanciée, et dans le constructeur du générateur j'ai rajouté (horlogeDuGenerateur=horlogeDuMain) ce qui me permet d'exploité les données de l'horloge dans le run sans avoir à le passer en paramètre.
Oulala j'espère que j'ai été clair, mais je sais qu'il y a des experts.
Voilà j'aimerais savoir si cette possibilité n'est pas trop laide ni problématique et s'il y a d'autres possibilités.
Merci d'avance
salut Etienne
j'avoue que ta préoccupation est assez vaguement exprimée.
je pense que pour t'aider il faudrait que l'on ait une copie du cahier de charge et une esquisse de ton dossier d'analyse si tu en as un !
tu peux toujours me faire voir où tu en es à jnzeutchap@yahoo.fr
BEAUCOUP DE COURAGE
janvier !
j'avoue que ta préoccupation est assez vaguement exprimée.
je pense que pour t'aider il faudrait que l'on ait une copie du cahier de charge et une esquisse de ton dossier d'analyse si tu en as un !
tu peux toujours me faire voir où tu en es à jnzeutchap@yahoo.fr
BEAUCOUP DE COURAGE
janvier !
Je vais tenter de réexpliquer car cette solution marche bien en fait, je me demandais juste si c'est correcte..
Pour faire simple, on a deux thread crées l'un à la suite de l'autre dans le prg principale.
Le 2ième Thread a besoin d'accéder aux données du premier (plus précisemment dans le run() )
Comme il est impossible (??? ) de passer des paramètres à la méthode run() du 2nd thread, j'ai rajouté une variable (attribut static) dans la définition de la classe du 2nd Thread. Et Lors de la création (constructeur) du 2nd Thread (à cet instant le premier thread tourne déjà) he bien j'affecte le thread qui tourne déjà à la variable de classe du 2nd Thread (en passant le premier thread en paramètre dans le constructeur)
Voilà j'espère que c'est plus clair
Pour faire simple, on a deux thread crées l'un à la suite de l'autre dans le prg principale.
Le 2ième Thread a besoin d'accéder aux données du premier (plus précisemment dans le run() )
Comme il est impossible (??? ) de passer des paramètres à la méthode run() du 2nd thread, j'ai rajouté une variable (attribut static) dans la définition de la classe du 2nd Thread. Et Lors de la création (constructeur) du 2nd Thread (à cet instant le premier thread tourne déjà) he bien j'affecte le thread qui tourne déjà à la variable de classe du 2nd Thread (en passant le premier thread en paramètre dans le constructeur)
Voilà j'espère que c'est plus clair