CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[java] polygone => parallelogram heritag

robxan
robxan
Niveau 10
12 février 2010 à 11:01:55

:salut:

Tout d'abord, désolé pour le titre incomplet, manque de caractère !

J'ai un petit soucis d'héritage en utilisant Java. J'ai commencé par implémenter une classe Polygone.java qui offre un constructeurs, des accesseurs et des services pour cette classe (j'ai également implémenté une classe Point.java pour réaliser ceci).

Un polygone est entièrement défini par ses sommets (j'ai créé le constructeur à l'aide d'une ArrayList)

J'aimerais maintenant définir une classe parallélogramme, qui hérite de Polygone, tout en spécifiant qu'il doit posséder quatre sommets et des côtés égaux deux à deux.

Comment s'y prendre ? Je vous joins le constructeur de mon code qui fait l'héritage, mais sans spécifier les particularités du parallélogramme.

:merci: par avance :)

import java.util.ArrayList;
import java.awt.Color;

public class Parallelogramme extends Polygone{
public Parallelogramme(Polygone p){
super(p);
}

}

________________________
Chuck Norris peut battre Novalis au Jammin' :noel:

_skip
_skip
Niveau 10
12 février 2010 à 11:16:33

Ton Polygone il définit quoi?

PS: Pour moi c'est un cas de mauvaise utilisation de l'héritage.

robxan
robxan
Niveau 10
12 février 2010 à 11:18:52

Mon Polygone définit des points, qui correspondent aux sommets du polygone.

PS : je suis contraint de suivre les directives du TP :o))

________________________
Chuck Norris peut battre Novalis au Jammin' :noel:

_skip
_skip
Niveau 10
12 février 2010 à 11:21:47

Donc c'est tout? Juste des points?
Pas de méthodes pour les définir, rien?

robxan
robxan
Niveau 10
12 février 2010 à 11:25:29

Je vais essayer d'être un peu plus précis ^^'

Donc j'ai commencé par créer ma classe Point qui créé un point à l'aide de deux entiers, à savoir ses coordonnées.

Ensuite, j'ai créé une ArrayList de Points pour faire le constructeur du Polygone. On créé donc, en pratique, un polygone, puis des points, et enfin on ajoute ces points dans l'ArrayList, ce qui permet de définir notre polygone.

C'est assez clair, ou il faut aussi des détails sur les services/accesseurs ?

________________________
Chuck Norris peut battre Novalis au Jammin' :noel:

_skip
_skip
Niveau 10
12 février 2010 à 11:31:56

Merci d'avoir détaillé la partie qu'on pouvait deviner sans problèmes. :fou:

Maintenant si tu parlais de l'interface publique? Parce que c'est là que tu vas avoir le gros des problèmes. en fait tu peux poster ton code sur le net

http://pastebin.com/

robxan
robxan
Niveau 10
12 février 2010 à 11:34:19

:rire: désolé :)

Je ferais ça un peu plus tard, je suis reparti en cours, mais je te remercie pour ton aide :)

J'espère que tu resteras dans les parages !

________________________
Chuck Norris peut battre Novalis au Jammin' :noel:

deepblue
deepblue
Niveau 16
12 février 2010 à 16:07:38

Comme on en parle ici, _skip, tu pourrais détailler ton PS sur l'héritage stp ? Merci ^^

saleGauss
saleGauss
Niveau 9
12 février 2010 à 20:42:39

Je pense que la bonne manière de voir ton probleme, si l'heritage est obligatoire, c'est par "contrainte".

Tu as ta classe Point.
Tu as ta classe Polygone.

I/ Polygone
-------------

Pour moi, un Polygone n'EST PAS un point. Un polygone CONTIENT DES POINTS.
Donc ta classe Polygone aura comme attributs une structure de donnée qui contiendra tes points. (de taille variable).
Tu peux envisager comme constructeur pour Polygone de prendre un entier décrivant le nombre de points qui vont définir ce polygone, et les-dits points en deuxième argument (dans la structure de donnée qui te convient).

II/ Quadrilatère
------------------

Tu peux alors maintenant créer une classe Quadrilatère, qui hériterait de Polygone.
Et là c'est correct, car un Quadrilatere EST un polygone.
Pour le constructeur de Quadrilatere, tu peux donc obliger de recevoir 4 couples couples décrivant tes points, et tu te contente d'appeler super(4, TonConteneur(couple1, couple2, couple3, couple4).

III/ Parrallélogramme
----------------------
Ensuite tu peux immaginer Parrallélogramme.
Un Parrallélogramme EST BIEN un Polygone, et c'est meme un Quadrilatere pour être plus précis.
Parrallélogramme va donc hériter de Quadrilatere.
Là, il va falloir fixer deux contraintes : les cotés opposés sont parallèles.
Comment obliger un Quadrilatère à être un Parrallélogramme, tout en garantissant qu'il n'y aura qu'UN Parrallélogramme représentable ?
Une idée serait de fournir trois points. Avec trois points, tu définis UN ET UN SEUL Parallélogramme. (fais des dessins pour le voir).
Le quatrième point peut donc etre calculé avec les trois premiers.
Tu peux donc créer un constructeur de Parrallélogramme qui :
- Prend trois couple (x,y) en entrée : couple1, couple2, couple3.
- Calcule le quatrieme couple : couple4, à partir des trois premiers.
- Appel super(couple1, couple2, couple3, couple4).
// Rappel : on hérite de Quadrilatere, qui attend 4 couples.

Et ainsi de suite tu pourrais rajouter différentes structures.
Attention pour l'heritage à toujours bien se demander si l'objet dérivé EST UN "nom_de_la_classe_supérieur", mais spécialisé.
Si il CONTIENT UN/DES machins, machins sera plutot un attribut.

J'espère avoir pu t'aider un peu.
Si tu as des questions, ou si j'ai dis des bétises, n'hesitez pas à me dire ce qui ne va pas.

_skip
_skip
Niveau 10
13 février 2010 à 09:56:41

Un parallélogramme n'enrichit pas le polygone, en vérité il n'apporte que des contraintes car il correspond à un état du polygone.

Suivant les fonctionnalités exposées par polygone, il se peut qu'il faille les appauvrir ou leur ajouter des effets de bords, c'est pour ça que je dis que c'est un mauvais cas d'héritage.

S'il faut appauvrir l'API publique du parent, c'est souvent signe que l'héritage est une solution risquée.

dnob700
dnob700
Niveau 10
13 février 2010 à 10:12:08

La spécialisation de module serait une meilleure idée, dans un langage comme Caml...

saleGauss
saleGauss
Niveau 9
13 février 2010 à 11:04:38

Je suis entièrement d'accord, c'est un mauvais cas d'héritage dans la réalité.
Il y a 99% de chance que les méthodes qu'il va écrire pour Polygone modifient un dit polygone, et que cela puisse transformer un parrallélogramme en un non-parrallélogramme.
Mais je pense qu'il s'agit d'un petit exercice "comme ça", juste pour découvrir l'héritage.

Ils ne vont pas se poser la question de savoir si le design est vraiment bon à ce niveau là, je pense.
Il ne faut pas y voir là plus qu'un petit exo écrit rapidement pas le prof dans un coin du tableau..

On nous a bien appris il y a très longtemps que pour faire des soustractions, on mettait le plus grand chiffre en premier, et le plus petit après le "moins".
On a maintenant tous admis que l'on peut faire l'inverse aussi...

robxan
robxan
Niveau 10
13 février 2010 à 14:20:34

Me revoila :o))

saleGauss :d) wi, je suis bien d'accord sur le principe, me soucis repose sur l'écriture du constructeur. Toute la partie mathématique, c'est pas bien compliqué, le problème est juste de le faire comprendre à la machine !

Je vous joins les différentes parties de mon code si vous avez le courage de parcourir ça :)

Tout d'abord, la classe point :
http://pastebin.com/m668298b9

L'interface ObjetGeometriques, dont la suite hérite :
http://pastebin.com/m627d9f04

L'interface ObjetGeometriquesPolygone qui hérite de celle ci-dessus :
http://pastebin.com/m391f144e

Ma classe Polygone, qui implémente tout ce bazard :
http://pastebin.com/m557ed6ad

Voila tout ce qui doit être nécessaire je pense. Après, je n'ai rien écrit encore pour le parallélogramme, je bloque au constructeur.

:merci: par avance si vous arrivez à m'aider :)

PS : c'est effectivement un exercice pour nous faire capter l'hérédité ^^

________________________
Chuck Norris peut battre Novalis au Jammin' :noel:

robxan
robxan
Niveau 10
14 février 2010 à 02:11:26

Après quelques réflexions, j'avais pensé à :

public class Parallelogramme extends Polygone{

public Parallelogramme(Polygone p){
if(p.getSommets().size()==4){
super(p);
}
}

}

getSommets() étant une méthode qui renvoie les sommets du polygone. Cependant, ca ne compile pas, le compilateur me dit que "super" doit être la première ligne du constructeur :-(

Encore une impasse :(

________________________
Chuck Norris peut battre Novalis au Jammin' :noel:

_skip
_skip
Niveau 10
14 février 2010 à 09:54:59

Attend, pourquoi tu voudrais faire avaler un polygone a un constructeur par copie? Si on te passe un octogone tu fais quoi?

C est un parallélogramme que tu dois prendre en paramètre, et tu peux immédiatement faire un super(p).
Par ailleurs ils seraient bien que tu renvoies des copies des points dans getSommets(). Sinon moi je fais :

pGramme.getSommets().add(new Point(34, 13));
ou un
pGramme.getSommets().get(0).setX(34);

Et c'est plus un parallélogramme. T'as aucune encapsulation en laissant modifier ta figure à l extérieur de la classe. Au moins si tu retournes des copies, si on modifie les copies ca n'altère pas ta forme.

isukthar
isukthar
Niveau 10
14 février 2010 à 12:53:24

Tu es quand même mal barré avec ce genre d'héritage. Si tu hérites de polygone, tu dois essayer de masquer les méthodes qui posent problème.
Par exemple ton constructeur qui prend un polygone en entrée, ça peut pas aller, on va te passer n'importe quoi. Même si tu testes 4 points, c'est pas forcément un parallélogramme.

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment