[Java] Structure d'un programme

Structure d'un programme [Java] - Java - Programmation

Marsh Posté le 03-05-2004 à 12:32:03    

Ca y est, je fais mes 1ers pas avec java!
Connaissant le C/C++ seulement, je me suis lu une bonne petite doc Java de sun tres bien faite :)
Cependant quelques questions subsistent :
1) Un programme doit obligatoirement avoir un fichier .java qui contient la classe main : j'ai pu remarque que dans les nombreux exemples de base donnes dans les documentations, la classe main est toujours englobee dans une classe (dont sa seule utilitee est d'englober la fonction main ())...cela me parait debile (par rapport au C ou un seul fichier main.c contient la fonction main et ses 10 lignes de code). Bref ceci n'est qu'une remarque.
 
2) La definition des methodes au sein des classes ne peut que s'effectuer a l'interieur des classes elles-memes (<=> fonction inline en C++). Cela ne permet pas de discerner l'allure global de la classe (apercu rapide) et son code (apercu en details de l'implementation). On ne peux pas faire autrement pour avoir un code plus lisible ?
 
Merci (ce sont que mes 1eres remarques :))
 
EDIT :
 
3) pour une methode ou bien un membre de donnee (attribut) d'une classe, on doit en permanence expliciter sa declaration a l'interieur de la classe par le mot cle public/private/protected obligatoirement ?  :heink:


Message édité par Giz le 03-05-2004 à 12:36:28
Reply

Marsh Posté le 03-05-2004 à 12:32:03   

Reply

Marsh Posté le 03-05-2004 à 12:48:10    

1) Tu fais comme tu veux, c'est pas important.
Le truc, c'est que à l'exécution, faut connaitre le point d'entrée static. Donc tu peux nommer le fichier avec le main d'un nom bien explicite, le nom de ton programme par exemple.
 
2) Le JAVA c'est beau et propre. Avec un bon éditeur, un petit changement d'habitude et un peu de vaseline, c'est le bonheur.
 
3) Si tu mets rien : visibilité de package

Reply

Marsh Posté le 03-05-2004 à 13:37:02    

pour le 2ème point :
http://www.nraynaud.org/kilombo/eclipse.png
 
 
edit : le point d'interrogation est dû à un plugin.


Message édité par nraynaud le 03-05-2004 à 13:38:04

---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 03-05-2004 à 14:00:24    

pour le point 2, la javadoc est aussi la pour ca ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 03-05-2004 à 14:17:41    

benou a écrit :

pour le point 2, la javadoc est aussi la pour ca ...

la javadoc c'est pour les faibles.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 03-05-2004 à 14:41:31    

nraynaud a écrit :

la javadoc c'est pour les faibles.


je vois pas pourquoi...  :heink:


---------------
Fleur de métal, entité invulnérable, vêtue tant bien que mal, d'une muraille inébranlable...
Reply

Marsh Posté le 03-05-2004 à 14:42:54    

myst78 a écrit :

je vois pas pourquoi...  :heink:

cqfd


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 03-05-2004 à 15:17:16    

+1


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 03-05-2004 à 16:52:28    

Giz a écrit :


la classe main est toujours englobee dans une classe (dont sa seule utilitee est d'englober la fonction main ())...cela me parait debile (par rapport au C ou un seul fichier main.c contient la fonction main et ses 10 lignes de code). Bref ceci n'est qu'une remarque.


 
Avec ça tu peux avoir plusieurs points d'entrées dans ton programme !!!
Pour tester une classe toute seule c'est très bien : tu lui colles une méthode main (que tu peux ensuite enlever) et roule.
 
Sinon tu peux avoir un programme avec deux points d'entrées : un pour fonctionner en mode ligne de commande et l'autre pour avoir une interface graphique. Par exemple je l'ai fait pour un programme de transformation XSL. Le mode ligne de commande fait de la transformation en batch sur les XML d'un répertoire et le mode graphique permet de lancer une seule transformation et de voir le résultat de suite.
 
Cependant on peut toujours se ramener à un seul point d'entrée  :jap:


Message édité par pascal34 le 03-05-2004 à 16:53:25
Reply

Marsh Posté le 03-05-2004 à 17:04:47    

pascal34 a écrit :


Pour tester une classe toute seule c'est très bien : tu lui colles une méthode main (que tu peux ensuite enlever) et roule.
 

ouaaais comme en 40 !


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 03-05-2004 à 17:04:47   

Reply

Marsh Posté le 03-05-2004 à 17:11:24    

Bon dites moi, j'ai besoin de pointeurs de fonction, ca existe ca en Java :??:

Reply

Marsh Posté le 03-05-2004 à 17:17:30    

100balles que t'en as pas besoin :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 03-05-2004 à 17:17:35    

(sinon oui ça existe)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 03-05-2004 à 17:18:59    

Spoiler :


Faut utiliser des nested class.

Reply

Marsh Posté le 03-05-2004 à 17:23:45    

the real moins moins a écrit :

(sinon oui ça existe)


 
bon admettons que je veux declarer un ptr de fonction ayant pour prototype :
int[] function (int, int, int[])
en C ca serait :
int * (*function) (int, int, int*)...et en Java c koi ?
 
Sinon, j'aimerais utilise un arbre binaire non equilibre (c'est pour represente un graphe), c koi le type de donne ?
est-ce TreeSet (http://java.sun.com/j2se/1.4.2/docs/api/java/util/TreeSet.html)
 
EDIT : non en fait ca serait plutot un arbre n-aire que je voudrais :/
 
Merci


Message édité par Giz le 03-05-2004 à 17:36:24
Reply

Marsh Posté le 03-05-2004 à 17:29:00    

Giz a écrit :

bon admettons que je veux declarer un ptr de fonction ayant pour prototype :
int[] function (int, int, int[])
en C ca serait :
int * (*function) (int, int, int*)...et en Java c koi ?
 

un peu de programmation orientée objet peut etre?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 03-05-2004 à 17:32:21    

the real moins moins a écrit :

un peu de programmation orientée objet peut etre?


 
ben koi, dans ma classe j'ai un ptr de fonction a initialisee dans le constructeur, pas le droit ?  [:wam]

Reply

Marsh Posté le 03-05-2004 à 17:33:17    

déjà parler de fonction ca n'a rien de vraiment objet.

Reply

Marsh Posté le 03-05-2004 à 17:37:18    

DarkLord a écrit :

déjà parler de fonction ca n'a rien de vraiment objet.


 
bon methode si tu preferes, ... ca existe dans les classes ca non  :pfff:

Reply

Marsh Posté le 03-05-2004 à 17:49:43    

Giz a écrit :

bon methode si tu preferes, ... ca existe dans les classes ca non  :pfff:

oui, biensur, d'ailleur "méthode" ça veut dire instance sur laquelle on l'invoque, ce qui répond à ta question.
 
 
un petit exemple, l'interface Task :
définie là :
http://opensvn.csie.org/jcoincoin/ [...] duler.java
implémentée là :
http://opensvn.csie.org/jcoincoin/ [...] ibune.java


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 03-05-2004 à 18:40:59    

tiens en faisant du google j'ai trouve explicitement reponse a ma question 2 :


"En Java une classe et tout ce qu'elle contient devant être déclarée entièrement dans un seul fichier, il n'est pas possible comme en C++ de répartir les méthodes d'une même classe sur plusieurs fichiers."


 
PS : effectivement nraynaud, je dois apprendre a utiliser les interfaces pour simuler des comportement identiques a un pointeur de fonction :)


Message édité par Giz le 03-05-2004 à 18:42:44
Reply

Marsh Posté le 03-05-2004 à 19:05:44    

the real moins moins a écrit :

(sinon oui ça existe)


 
J'aimerais bien voir ça  :ouch:
 
pake avec des interfaces c'est pas vraiment des pointeurs au sens C


Message édité par pascal34 le 03-05-2004 à 19:07:49
Reply

Marsh Posté le 03-05-2004 à 19:18:53    

pascal34 a écrit :

J'aimerais bien voir ça  :ouch:
 
pake avec des interfaces c'est pas vraiment des pointeurs au sens C

à mon avis, il parlait de ce que je t'ai montré.
 
Il n'existe pas de pointeurs au sens du C en java, c'est un langage sérieux.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 03-05-2004 à 19:38:48    

au fait j'ai trouve pour les n-ary tree.
Bien Bien Bien...une autre chose :
 
-Comment implemente ton le type generique en Java (etant donne que c un language fortement type :/)
Il arrive frequemment en C qu'on rajoute une user_data dans un protype de fonction. Il s'agit d'une donnee utilisateur dont on ne connait le type mais que l'utilisateur, lui, le connait car il veut l'utiliser avec cette fonction. Souvent, il s'agit d'un pointeur sur une zone memoire : type void * en C
Que dois-je faire en java pour remplacer ce type (... function (...,..., void *user_data)
 
Merci  :jap:

Reply

Marsh Posté le 03-05-2004 à 19:44:19    

Reply

Marsh Posté le 03-05-2004 à 19:44:58    

on utilise Object et des casts, comme quand on utilise une collection :

Code :
  1. List list = new ArrayList();
  2. list.add("coucou" );
  3. String s = (String) list.get(0);



---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 03-05-2004 à 19:51:48    

Reply

Marsh Posté le 03-05-2004 à 19:52:17    

ok


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 04-05-2004 à 12:13:13    

les #define, c quoi en Java ?

Reply

Marsh Posté le 04-05-2004 à 12:26:04    

Giz a écrit :

les #define, c quoi en Java ?


Code :
  1. public static final int toto = 0;


---------------
Light is right
Reply

Marsh Posté le 04-05-2004 à 17:50:31    

Je desire utliser des listes doublement chainees. J'espere que le type LinkedList le sont bien car c'est pas precise explicitement :/.
Ce type dispose de la methode  
addFirst(Object o)
Moi je veux passer un int en argument (reference a un int), le pb c qu'il veut un type Object pas int. J'ai dc essaie de caster, ñais le compilo fait la gueule :  

Ant.java:139: error:Cannot cast from "int" to "java.lang.Object" [JLS 15.16]

. Comment fait-on ?

Reply

Marsh Posté le 04-05-2004 à 17:54:13    

On utilise le JDK 1.5 avec l'autoboxing  :D  
 
En fait tu doit convertir ton int en Integer pour pouvoir l'ajouter a une collection. Les collections ne prennent que des objets, pas des types de base.
Tu fais l'operation en sens inverse pour lire ton int depuis ta liste.


---------------
Light is right
Reply

Marsh Posté le 04-05-2004 à 17:56:42    

Giz a écrit :

Comment fait-on ?

on lit un bouquin.
t'en as encore beaucoup des questions comme ça en stock?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 04-05-2004 à 17:59:47    

spa gentil :o
 
:D


---------------
As the plane took off, the pilot turned to the co-pilot and said, “Have you ever flown solo?” Co-pilot: No. Typically I fly much higher than this.
Reply

Marsh Posté le 04-05-2004 à 18:05:28    

nerisson a écrit :

On utilise le JDK 1.5 avec l'autoboxing  :D  
 
En fait tu doit convertir ton int en Integer pour pouvoir l'ajouter a une collection. Les collections ne prennent que des objets, pas des types de base.
Tu fais l'operation en sens inverse pour lire ton int depuis ta liste.


 
il faut que je mette mon int dans une classe alors, puis ma classe sera consideree comme type Object ?  :heink:

Reply

Marsh Posté le 04-05-2004 à 18:13:27    

ouaip. par exemple:  
int monDentier = 1;
Integer toto = new Integer(monDentier);
et ce sera un object.
 
et pour reprendre la valeur: int monDentier = toto.intValue();


Message édité par TBone le 04-05-2004 à 18:13:56

---------------
As the plane took off, the pilot turned to the co-pilot and said, “Have you ever flown solo?” Co-pilot: No. Typically I fly much higher than this.
Reply

Marsh Posté le 04-05-2004 à 18:14:39    

et l'autoboxing, c'est fait pour éviter ces pirouettes (mais faut encore attendre un chouïa)


Message édité par TBone le 04-05-2004 à 18:14:55

---------------
As the plane took off, the pilot turned to the co-pilot and said, “Have you ever flown solo?” Co-pilot: No. Typically I fly much higher than this.
Reply

Marsh Posté le 04-05-2004 à 18:23:43    

TBone a écrit :

ouaip. par exemple:  
int monDentier = 1;
Integer toto = new Integer(monDentier);
et ce sera un object.
 
et pour reprendre la valeur: int monDentier = toto.intValue();


 
merci  ... avec un exemple on ne peut plus clair ! :jap:
... hein the real moins moins  :kaola:

Reply

Marsh Posté le 04-05-2004 à 18:45:28    

mais ta gueule :sarcastic:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 04-05-2004 à 19:44:50    

Giz a écrit :

J'espere que le type LinkedList le sont bien car c'est pas precise explicitement  


je sais pas où tu as cherché pour voir que c'était pas précisé parce que c'est clairement indiqué dans la javadoc ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed