Tout ce qui concerne le logiciel E-anim
 
AccueilPortailFAQS'enregistrerConnexion

Partagez | 
 

 [java] filiation ou import

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : 1, 2  Suivant
AuteurMessage
chris_c
Accro
Accro
avatar

Nombre de messages : 8403
Age : 47
Date d'inscription : 18/11/2007

Message Sujet: [java] filiation ou import   Dim 09 Nov 2014, 16:22

Pour quelle utilisation on crée un lien de filiation entre deux classes ?

implements (renvoie à la fille ?) et extends (à la mère ?).

.....

Pour quelle utilisation on importe une classe crée par soi-même dans une autre ?

Revenir en haut Aller en bas
Admin
Administrateur
Administrateur
avatar

Nombre de messages : 18426
Localisation : Toulouse
Date d'inscription : 11/12/2005

Message Sujet: Re: [java] filiation ou import   Dim 09 Nov 2014, 17:05

Bonjour,

chris_c a écrit:
Pour quelle utilisation on crée un lien de filiation entre deux classes ?

implements (renvoie à la fille ?) et extends (à la mère ?).
Il n'y a pas de règle, mais tu trouveras un exemple dans la classe Components et ses fille : Button et 'TextComponent'

Tu verras que la fonction 'paint(Graphics g)' du Component utilise en fait les fonctions 'paint()' de ses héritiers -> 'Button' et 'TextComponant'


.....

chris_c a écrit:
Pour quelle utilisation on importe une classe crée par soi-même dans une autre ?
Pour modifier 'un peu' une autre classe.
Exemple si tu veux créer un bouton qui aura une action un peu différente du Button de Java.

_________________
.
Revenir en haut Aller en bas
http://www.e-anim.com
chris_c
Accro
Accro
avatar

Nombre de messages : 8403
Age : 47
Date d'inscription : 18/11/2007

Message Sujet: Re: [java] filiation ou import   Dim 09 Nov 2014, 17:53

Admin a écrit:
Bonjour,

chris_c a écrit:
Pour quelle utilisation on crée un lien de filiation entre deux classes ?

implements (renvoie à la fille ?) et extends (à la mère ?).
Il n'y a pas de règle, mais tu trouveras un exemple dans la classe Components et ses fille : Button et 'TextComponent'

Tu verras que la fonction 'paint(Graphics g)' du Component utilise en fait les fonctions 'paint()' de ses héritiers -> 'Button' et 'TextComponant'


.....

Pour quelle utilisation on importe une classe crée par soi-même dans une autre ?
Pour modifier 'un peu' une autre classe.
Exemple si tu veux créer un bouton qui aura une action un peu différente du Button de Java.[/quote]

Merci, ca je comprends mais je précise mon questionnement.

Là je lis un livre sur la programmation java, où ca parle de "a un" et "est un"...par exemple:

une voiture a des roues
une voiture est un véhicule

la classe véhicule est parent de voiture, par extension (extends) juste ?
la  classe voiture implémente ou importe la classe roues ?

edit: le polymorphisme des classes est flou pour moi.
edit: roues est un composant (components ?) de voiture, mais ca reste pas clair si on parle d'implément ou d'import (ou d'extension) ?
Revenir en haut Aller en bas
chris_c
Accro
Accro
avatar

Nombre de messages : 8403
Age : 47
Date d'inscription : 18/11/2007

Message Sujet: Re: [java] filiation ou import   Dim 09 Nov 2014, 19:31

Bon, je crois que j'ai compris

public class voiture extends vehicule
public class velo extends vehicule

class pedale implements velo
class moteur implements voiture

juste ? ou class pedale et class moteur doivent etre implémentés dans vehicule ?

Après, voir comment manier ses objets dans le code.
Revenir en haut Aller en bas
Admin
Administrateur
Administrateur
avatar

Nombre de messages : 18426
Localisation : Toulouse
Date d'inscription : 11/12/2005

Message Sujet: Re: [java] filiation ou import   Dim 09 Nov 2014, 22:48

chris_c a écrit:
Bon, je crois que j'ai compris

public class voiture extends vehicule
public class velo extends vehicule
Oui
chris_c a écrit:
class pedale implements velo
class moteur implements voiture

juste ? ou class pedale et class  moteur doivent etre implémentés dans vehicule ?
Non, "implements" ne sert à rien dans ce cas.

Extends et Implements (dont les rôles sont presque identiques) servent à définir un type général à ton objet.
Exemple : Voiture est effectivement une des formes d'un Vehicule
on pourrait aussi écrire : class Voiture implements Vehicule

En revanche : une Pedale est une partie du Velo.
la classe Pedale n'aura peut-être pas d'extends ni d'implements
Exemple : class pedale{...}
Puis on place la Pedale dans le Velo
Exemple :
class Velo extends Vehicule{
   Pedale maPedale;
}

_____________________________________________________
La différence en 'sous-ensemble' et 'partie' trèèès importante.
- le velo est un sous-ensemble des Vehicules
- une pédale est une partie d'un vélo


Nous verrons 'implements' quand tu auras bien compris ces 2 notions.
(pour l'instant, il te suffit que 'implements' définit un sous-ensemble, exactement comme 'extends')

Phildes

_________________
.
Revenir en haut Aller en bas
http://www.e-anim.com
chris_c
Accro
Accro
avatar

Nombre de messages : 8403
Age : 47
Date d'inscription : 18/11/2007

Message Sujet: Re: [java] filiation ou import   Lun 10 Nov 2014, 11:52

Je comprends la notion de sous-ensemble et de partie.

Mais je ne comprends pas quand je dois les utiliser.

Là, je me dis java a des outils existants, et que extends, implements servent à créer des outils personnels, que pour l'instant je confonds avec autre chose, qui serait je crée par exemple une grille de loto. Je fais une classe qui va créer une methode tirage au sort, et dans ma classe principale j'appelle la classe tirageAusort où je l'introduis dans ma méthode construirelagrille, et là je ne comprends pas si je dois utiliser la classe tirageAusort simplement ou si ca passe par extends ?

Revenir en haut Aller en bas
chris_c
Accro
Accro
avatar

Nombre de messages : 8403
Age : 47
Date d'inscription : 18/11/2007

Message Sujet: Re: [java] filiation ou import   Lun 10 Nov 2014, 15:11

Ok, j'ai relu une autre documentation qui s'appelle java pour les enfants en pdf

j'ai une classe vehicule

une classe voiture extends vehicule
une classe velo extends vehicule

une classe rouler avec une méthode pedaler
une classe conduire avec une methode demarrerMoteur

une classe voyager avec une methode main qui appelle rouler

et là, je vois mieux le tout, et commencer à écrire le code

et là, je veux dire que velo a une pedale ? que voiture n'a pas de pedale, mais un moteur ?
et pour voyager, j'ai besoin d'une route et une autoroute ? où velo et voiture peuvent aller sur route, mais autoroute est seulement pour voiture ?
est-ce que c'est nécessaire d'avoir une classe rouler et une classe conduire ?
et "une classe rouler avec une méthode pedaler", ca ressemble pas à un objet, si c'est pas un objet, c'est quoi. EDIT: dans la classe voyager, je crée une variable cycliste:
velo cycliste = new velo();
ce qui donnerait cycliste.rouler()
Revenir en haut Aller en bas
chris_c
Accro
Accro
avatar

Nombre de messages : 8403
Age : 47
Date d'inscription : 18/11/2007

Message Sujet: Re: [java] filiation ou import   Lun 10 Nov 2014, 23:19

Bon entretemps, j'ai avancé. Maintenant comment afficher : la voiture démarre et la voiture de james bond démarre ? EDIT: j'ai trouvé

Du coup, j'ai juste besoin de comprendre la différence entre extends et implements. edit 2:Intuiton que extends renvoie à une sous-classe et implements appelle un élément d' une sous classe, pas sûr...

Et  aussi dans  ma console  ca s'affiche ainsi: la voiture demarre, 1200 kilometres, la voiture s'arrete...puis la voiture de james bond demarre, 2000 kilometres, la voiture de james bond s'arrete...je cherche à ce qu'elles soient simulatanées....






j'ai fait ce code:

Code:
class VoitureProprietaire{

public static void main(String[] args) {
int distance;


Voiture maVoiture = new Voiture();

maVoiture.demarrer();

distance =maVoiture.rouler(20);
System.out.println(distance + "kilometres");
maVoiture.arreter();


VoitureJamesBond masuperVoiture = new VoitureJamesBond();
distance=masuperVoiture.rouler(20);
System.out.println(distance + "kilometres");

 }
 }
Code:
class Voiture {

int duree;
int distance;

public void demarrer(){
System.out.println("la voiture demarre");}
public void arreter(){
System.out.println("la voiture s'arrete");}

public  int rouler(int duree){

 distance=(duree*60);

return distance;

 }
 }
Code:
public class VoitureJamesBond extends Voiture {
 
 int duree;
 int distance;
 
 public int rouler(int duree){

 distance=(duree*100);

 return distance;}

}
Revenir en haut Aller en bas
chris_c
Accro
Accro
avatar

Nombre de messages : 8403
Age : 47
Date d'inscription : 18/11/2007

Message Sujet: Re: [java] filiation ou import   Mar 11 Nov 2014, 10:12

Bon je continue d'avancer. J'ai trouvé pas mal de réponses, sauf l'import, je ne vois pas pourquoi c'est utile si on a d'autres manières de faire qui sont efficaces.
Revenir en haut Aller en bas
Admin
Administrateur
Administrateur
avatar

Nombre de messages : 18426
Localisation : Toulouse
Date d'inscription : 11/12/2005

Message Sujet: Re: [java] filiation ou import   Mar 11 Nov 2014, 15:13

chris_c a écrit:
Bon je continue d'avancer. J'ai trouvé pas mal de réponses, sauf l'import, je ne vois pas pourquoi c'est utile si on a d'autres manières de faire qui sont efficaces.
A quoi sert 'import' ?
En fait ton script ne connait pas les fichiers situés dans les autres dossiers.
Il faut donc indiquer à ton script l'endroit où il trouveras ces autres fichiers.
'import' sert à ça. Dans chaque 'import' tu indiques le chemin vers un dossier ou un fichier que ton script utilise.

Exemple : si tu fais une fenêtre, tu utiliseras un objet "Frame". Tu devras donc indiquer à ton script où ce trouve "Frame".

Note : avec Eclipse, si le chemin vers 'Frame' n'est pas indiqué dans un 'import' -> le mot Frame sera souligné en rouge (il indiquer donc une erreur)
-> il te suffit de placer le curseur sur le mot 'Frame' + appuyer sur Ctrl+M
=> Eclipse va inscrire automatiquement : import java....Frame;

Phildes

_________________
.
Revenir en haut Aller en bas
http://www.e-anim.com
chris_c
Accro
Accro
avatar

Nombre de messages : 8403
Age : 47
Date d'inscription : 18/11/2007

Message Sujet: Re: [java] filiation ou import   Mer 12 Nov 2014, 00:05

Admin a écrit:
chris_c a écrit:
Bon je continue d'avancer. J'ai trouvé pas mal de réponses, sauf l'import, je ne vois pas pourquoi c'est utile si on a d'autres manières de faire qui sont efficaces.
A quoi sert 'import' ?
En fait ton script ne connait pas les fichiers situés dans les autres dossiers.
Il faut donc indiquer à ton script l'endroit où il trouveras ces autres fichiers.
'import' sert à ça. Dans chaque 'import' tu indiques le chemin vers un dossier ou un fichier que ton script utilise.

Exemple : si tu fais une fenêtre, tu utiliseras un objet "Frame". Tu devras donc indiquer à ton script où ce trouve "Frame".

Note : avec Eclipse, si le chemin vers 'Frame' n'est pas indiqué dans un 'import' -> le mot Frame sera souligné en rouge (il indiquer donc une erreur)
-> il te suffit de placer le curseur sur le mot 'Frame' + appuyer sur Ctrl+M
=> Eclipse va inscrire automatiquement : import java....Frame;

Phildes

Merci dans l'exemple que j'avais, effectivement la classe était dans un dossier.

il me reste à voir: implements, interface et les classes abstraites... study

Bonne nuit drunken
Revenir en haut Aller en bas
chris_c
Accro
Accro
avatar

Nombre de messages : 8403
Age : 47
Date d'inscription : 18/11/2007

Message Sujet: Re: [java] filiation ou import   Mer 12 Nov 2014, 08:33

Dans mon code, plus haut, ma sous-classe surcharge la methode, Eclipse me l'indique mais compile, je dois ajouter @override, le raccourci clavier c'est quoi ?

est-ce que implements sert a surcharger une méthode d'une sous-classe native ?
Revenir en haut Aller en bas
Admin
Administrateur
Administrateur
avatar

Nombre de messages : 18426
Localisation : Toulouse
Date d'inscription : 11/12/2005

Message Sujet: Re: [java] filiation ou import   Mer 12 Nov 2014, 11:07

chris_c a écrit:
Dans mon code, plus haut, ma sous-classe surcharge la methode, Eclipse me l'indique mais compile, je dois ajouter @override, le raccourci clavier c'est quoi ?

Est-ce que implements sert a surcharger une méthode  d'une sous-classe native ?
Non, implements  sert à surcharger des classes interface

En fait 'implements', est une commande batarde.

Faisons un peu d'histoire :
dans d'anciens langages Objets, on pouvait mettre plusieurs 'extends'.

Reprenons l'exemple de 'Voiture', elle hérite de "Vehicule" : OK.
Mais ta Voiture a un propriétaire. Pour un notaire, elle sera traité comme un 'bien-meuble'.
=> Donc elle sera classée avec des chaises, les lits, les tableaux...
=> Donc la voiture devrait aussi hériter de 'BienMeuble'
!!! C'EST IMPOSSIBLE !!! En java, un objet ne peut hériter que d'un parent et un seul !!!

Donc, les auteurs de Java ont eut l'idée de créer un héritage 'batard' : "implements".
Avec une règle impérative pour 'implements' : la classe parent doit être 'vide' ! ce n'est pas une classe, c'est une interface (tu écris 'interface' à la place de 'classe')

Exemple :
interface BienMeuble{
   static final long VALEUR_MAX = 1000000;
   static final String DESCRIPTION = "Ceci est aussi un bien meuble";
  public long calculerValeur();
}

_______________________________________________________________
Qu'est-ce qu'une interface ?
C'est un classe très très limitée.

Il existe 2 type d'informations dans une interface :
1 - Les prototype-de-fonction (il n'y a que le nom et les paramètres, le script entre accolade est absent)
Tu remarque que public long calculerValeur(); ne possède pas d'accolade pour écrire le script de cette fonction.
Elle à 2 rôles :
a - permettre aux BienMeubles d'accepter cette fonction.
Exemple :
   BienMeuble bien = new Voiture();
   long valeur = bien.calculerValeur();
=> Si tu n'avais pas défini la fonction dans l'interface, le java ne connaitrait pas 'calculerValeur()' => BUG

b - forcer les héritier à écrire un script pour cette fonction.
Dans notre exemple, Voiture devra impérativement comporter la fonction "calculerValeur(){...}" AVEC le script entre accolade.

2 - les Constantes
Voir ci-dessous, ce qu'est une constante.
____________________________________________________
Que sont les constantes ?
Les "constantes" sont des valeurs traduite en mot, dans ton script. Dans le script tu ne peux pas modifier la valeur d'une constante.
Mais, mais, mais, dans le code final, java remplace tous tes mots par la valeur indiquée.
Exemple :
   static final long VALEUR_MAX = 1000000;
   si dans une ligne tu écris : long val = BienMeuble.VALEUR_MAX;

   => java compilera par : long val = 1000000;
   =>=> BienMeuble.VALEUR_MAX disparaitra purement et simplement.


  void myFunction(){
       BienMeuble.VALEUR_MAX = 200000;
  }
   => INTERDIT !!! Il est impossible de modifier la valeur d'une 'constante'


A quoi servent les CONSTANTES :
1 - à rendre ton script plus clair
2 - si tu veux modifier la 'valeur_max', il te suffit de changer une seule ligne de ton code (sinon, il faut aller rechercher toutes les lignes où tu utilise VALEUR_MAX'
En résumé : les constantes servent à te simplifier la vie (mais Java n'en à rien à faire!)
____________________________________________________
Cette explication décris 4 nouveaux mots :
constante : mot qui sera remplacé par sa valeur lors de la compilation.
il est interdit de modifier cette valeur dans le script (hormis dans la déclaration : CONSTANTE=valeur;  INTERDIT !!!)
prototype : description d'une fonction, mais sans les instructions (il n'y a pas d'accolades après la fonction)
interface : une classe qui ne contient que des constantes et des prototypes de fonction
implements : indique qu'une classe hérite d'une ou plusieurs interface(s)

Phildes

_________________
.
Revenir en haut Aller en bas
http://www.e-anim.com
chris_c
Accro
Accro
avatar

Nombre de messages : 8403
Age : 47
Date d'inscription : 18/11/2007

Message Sujet: Re: [java] filiation ou import   Mer 12 Nov 2014, 20:23

Merci, j'avais déjà un peu vu les constantes, qu'on met en majuscules.
Revenir en haut Aller en bas
Admin
Administrateur
Administrateur
avatar

Nombre de messages : 18426
Localisation : Toulouse
Date d'inscription : 11/12/2005

Message Sujet: Re: [java] filiation ou import   Jeu 13 Nov 2014, 10:14

chris_c a écrit:
Merci, j'avais déjà un peu vu les constantes, qu'on met en majuscules.
Attention, je ne parle pas des constantes. le sujet est l'implements' et 'interface'
Les constantes sont utiles à connaitre pour comprendre 'implements'. Mais le sujet est bien 'implements' et 'interface'.

Phildes

_________________
.
Revenir en haut Aller en bas
http://www.e-anim.com
Contenu sponsorisé




Message Sujet: Re: [java] filiation ou import   

Revenir en haut Aller en bas
 
[java] filiation ou import
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» [java] filiation ou import
» Erreur java affichage didacticiel fourni avec E-Anim
» Net framework et Java
» [/résolu] problème avec java à l'instalation :-/
» [resolu] import et destruction de groupe/swf

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
E-anim :: Autres :: Autre langages - java, javascript, php...-
Sauter vers: