Modélisation d'un système solaire en Java, en plus d'être amusant, est un bon exercice pour illustrer la pensée et de la pratique en termes de certains concepts de base de la conception orientée objet (OOD), en particulier l'héritage et le polymorphisme. Vous pouvez apprendre les concepts OOD avec un modèle simple de système solaire build-votre-propre.
Créez vos fichiers de classe. Créer une structure de squelette pour votre système solaire en créant les fichiers de base de classe. 16- Ne vous inquiétez pas à propos de ce qui se passe en eux en ce moment. Il suffit de créer les fichiers Java de suivi:
GravityObject.java
OrbitalSystem.java
Star.java
Planet.java
Vous pouvez ajouter plus de ceux-ci plus tard si vous le souhaitez. Par exemple, vous pouvez ajouter une classe Lune, et vous pourriez ajouter des types de planète et étoile.
Créer GravityObject classe abstraite. Vous voulez créer votre GravityObject comme une classe abstraite. Déclarer une classe d'être abstraite en Java indique au compilateur que nous voulons cette classe pour servir de modèle pour être utilisé par d'autres classes, mais la classe ne doit pas être créé lui-même. Cela a un sens pour l'exemple du système solaire: il n'y a pas une telle chose comme un "GravityObject", Mais il ya des choses comme les planètes et les étoiles, qui sont des objets qui ont et qui sont touchés par la gravité. Vous écrivez seulement la programmation pour elle un moment. Dans la conception orientée objet, ce trait est appelé héritage.
Tapez ceci dans votre fichier GravityObject:
public abstract class GravityObject {
9 double xPosition-
9 double YPosition
GO
9 double degreeInOrbit
GO
9 double distanceFromParent
GO
9-GravityObject () {
9- 9-this.distance = 0
GO
9-}
9-GravityObject (distance double) {
9- 9-this.distance = distance
GO
9-}
}
Ceci est un exemple simple, si vous utilisez uniquement les positions x et y de l'objet, ainsi que la distance à partir de son parent et une variable de degré. Vous pourriez créer un autre plus tard classe abstraite, 3DGravityObject ou RelativisticGravityObject, et avoir hériter de cet objet. Cela vous permettra d'ajouter des détails pour des choses qui changent.
Créer la classe abstraite OrbitalSystem. Cette classe sera aussi abstrait, mais sera plus sophistiqué que la classe GravityObject.
importation java.util.ArrayList
GO
OrbitalSystem public abstract class étend GravityObject {
&N ° 9-privé ArrayList enfants = new ArrayList () - // objets à l'intérieur du système. Ils seront en orbite autour de la société mère.
&N ° 9;
9-public void add (GravityObject enfant) {children.add (enfant) -}
9-tique publique void () {
9- 9-for (int x = 0 à x lt; children.size () - x ++) {
9- 9- 9-courant GravityObject = children.get (x)
GO
9- 9- = 1 + 9-current.degree
9- 9- 9-current.xPosition = this.xPosition + Math.cos (degrés / 180 Math.PI) current.distance
GO
9- 9- 9-current.yPosition = this.yPosition - Math.sin (degrés / 180 Math.PI) current.distance
GO
9- 9-} (voir les références 2)
9-
9-}
}
La classe étend la classe GravityObject. Le ArrayList contient tous GravityObjects, et a déclaré son variable privée de sorte que vous pouvez forcer les autres classes pour utiliser la fonction d'ajout, assurant que seuls GravityObjects peuvent être ajoutés au tableau. Cela illustre deux autres concepts OOD importantes outre héritage. Le premier est la dissimulation des données: par scellement de suite, vous avez fait en sorte que d'autres parties du programme ne peuvent pas y accéder et de mettre des informations non valides en elle. Le second est le polymorphisme, ce qui nous permet de se référer à un objet en utilisant non seulement ses propres noms, mais les noms de l'un de ses ancêtres. Cela permet une grande souplesse dans l'écriture de code.
Écrire des classes de la planète et étoile. Comme la plupart des travaux ont été effectués dans les classes OrbitalSystem et GravityObject abstraites, les classes planète et étoile sera simple.
Étoile public class OrbitalSystem étend {}
GO
et
Planète public class étend GravityObject {};
Donnez votre classe principale. Votre fonction principale devrait ressembler à ce qui suit:
main (String [] args) {public static int
&S = # 9-Star nouvelle Star () - // Création d'une nouvelle étoile.
9-s.add (nouvelle Planet (20)) - // Ajouter une planète au système orbital de l'étoile qui orbite à une distance de 20 unités.
9-s.add (nouvelle Planet (66)) - // Ajouter une autre planète pour système orbital de l'étoile qui orbite à une distance de 66 unités.
9-while (true) {
9- 9-s.tick ()
GO
9-}
}
Cela va créer une étoile et deux planètes en orbite autour, et les mettre en mouvement.