La modélisation d'un système solaire en Java, en plus d'être amusant , est un bon exercice pour illustrer et pratiquer penser en termes de certains concepts de base en matière de conception orientée objet ( OOD) , en particulier l'héritage et le polymorphisme . Vous pouvez apprendre les concepts OOD avec une accumulation -votre- propre modèle de système solaire simple. Choses que vous devez
Java Kit
Ordinateur de développement logiciel ( SDK )
éditeur de texte ou Java environnement de développement intégré (IDE)
Voir Plus Instructions
1 < br > 2
Créer GravityObject classe abstraite. Vous souhaitez créer votre GravityObject comme une classe abstraite. Déclarer une classe pour être résumé 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 été et sont affectées par la gravité . Vous écrivez seulement la programmation pour le moment. Dans Conception Orientée Objet, ce trait est appelé héritage
Type de ceci dans votre fichier GravityObject :
public abstract class GravityObject { à double Xposition ; deux yposition ; deux degreeInOrbit ; deux distanceFromParent ;
.
GravityObject () { this.distance = 0; }
GravityObject ( double de la distance ) { this.distance = distance ;}}
Ceci est un exemple simple , vous aurez donc utiliser uniquement les positions x et y de l'objet , ainsi que la distance à partir de son parent , et une variable de degré . Vous pouvez ensuite créer une autre classe abstraite, 3DGravityObject ou RelativisticGravityObject , et le faire hériter de cet objet. Cela vous permettra d'ajouter les détails de choses qui changent .
3
créer la classe abstraite OrbitalSystem . Cette classe sera aussi abstraite, mais sera plus sophistiqué que la classe GravityObject
importation java.util.ArrayList ; .
Publique OrbitalSystem classe abstraite s'étend GravityObject { ArrayList enfants privés = new ArrayList ( ) ; //Objets dans le système. Ils seront en orbite les parents
Ajoutez publics vides ( GravityObject enfant ) { children.add ( enfant );} .
Tiques public void () { for (int x = 0; x < children.size (); x + +) { GravityObject courant = children.get (x); current.degree + = 1current.xPosition = this.xPosition + Math.cos ( degree/180 * Math.PI ) * current.distance ; courant . yposition = this.yPosition - Math.sin ( degree/180 * Math.PI ) * current.distance ;} (voir références 2 )
}}
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 à utiliser la fonction add , assurant que seuls GravityObjects peuvent être ajoutés au tableau . Cela illustre deux autres concepts OOD importantes en dehors de l'héritage. La première est la dissimulation des données : en scellant loin, vous avez fait en sorte que les 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 nous 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 flexibilité dans l'écriture de code .
4
Write planète et les classes d' étoiles . Comme la plupart des travaux ont été réalisés dans le OrbitalSystem abstrait et classes de GravityObject , la planète et les classes d' étoiles seront simples
Star public class OrbitalSystem {}; .
Et
< p> planète public class GravityObject {};
5
Ecrire classe principale . Votre fonction principale devrait ressembler à ce qui suit:
public static void main ( String [] args ) { Étoile s = new Star ( ) ; //Création d' un nouveau star.s.add ( nouvelle planète (20) ) ; //Ajouter une planète de système orbital de l'étoile qui orbite à une distance de 20 units.s.add ( nouvelle planète (66) ) ; //Ajouter une autre planète pour le système orbital de l'étoile qui orbite à une distance de 66 unités .
while ( true) { s.tick ();} }
Cela va créer une étoile et deux planètes en orbite , et les mettre en mouvement < . br>