Hvordan bygge din egen solsystemet i Java

Modellering et solsystem i Java, foruten å være morsomt, er en god øvelse for å illustrere og praksis tenkning i form av noen grunnleggende begreper i objektorientert design (OOD), spesielt arv og polymorfisme. Du kan lære OOD konsepter med en enkel bygge-din-egen solenergi system modell.

Bruksanvisning

1 Lag dine klassefilene. Lag en skjelettstruktur for solsystemet ved å skape de grunnleggende klassefilene. Ikke bekymre deg om hva som foregår i dem akkurat nå. Bare lage den følge Java-filer:

GravityObject.java
OrbitalSystem.java
Star.java
Planet.java

Du kan legge mer til disse senere hvis du vil. For eksempel kan du legge til en Moon klasse, og du kan legge til planet og stjerne typer.

2 Lag GravityObject abstrakt klasse. Det er lurt å lage din GravityObject som en abstrakt klasse. Å erklære en klasse for å være abstrakt i Java indikerer for kompilatoren at vi ønsker denne klassen for å tjene som en modell for å bli brukt av andre klasser, men den klasse skal ikke opprettes seg selv. Dette er fornuftig for solsystemet eksempel: det er ikke noe slikt som en \ "GravityObject \", men det er ting som planeter og stjerner, som er gjenstander som har og påvirkes av tyngdekraften. Du bare skrive programmering for det en gang. I objektorientert design, er denne egenskapen kalles arv.

Skriv dette inn i din GravityObject filen:

offentlige abstrakt klasse GravityObject {
dobbel xPosition;
dobbel yPosition

dobbel degreeInOrbit

dobbel distanceFromParent

GravityObject () {
this.distance = 0

}

GravityObject (dobbel avstand) {
this.distance = avstand

}
}

Dette er et enkelt eksempel, så vil du bare bruke x- og y-posisjonene av objektet, sammen med avstanden fra sin forelder og en grad variabel. Du kan senere opprette en abstrakt klasse, 3DGravityObject eller RelativisticGravityObject, og ha den arver fra dette objektet. Dette vil tillate deg å legge detaljene for ting som endres.

3 Opprett OrbitalSystem abstrakt klasse. Denne klassen vil også være abstrakt, men vil være mer avansert enn GravityObject klasse.

import java.util.ArrayList

offentlige abstrakt klasse OrbitalSystem strekker GravityObject {
private Arraylist barn = ny Arraylist (); // Objekter i systemet. De vil gå i bane rundt forelder.

public void add (GravityObject barn) {children.add (barn); }

public void tick () {
for (int x = 0; x <children.size (); x ++) {
GravityObject current = children.get (x)

current.degree + = 1
current.xPosition = this.xPosition + Math.cos (grad / 180

Math.PI) current.distance

current.yPosition = this.yPosition - tak i Math.sin (grad / 180 Math.PI) current.distance

} (Se referanser 2)

}
}

Klassen utvider GravityObject klassen. Arraylist holder alle GravityObjects, og erklærte sin variable privat, slik at du kan tvinge andre klasser til å bruke funksjonen add, noe som sikrer at bare GravityObjects kan legges til matrisen. Dette illustrerer to andre viktige OOD begreper foruten arv. Den første er data skjule: ved å forsegle den bort, har du sørget for at andre deler av programmet ikke kan få tilgang til det og sette ugyldig informasjon i den. Den andre er polymorfisme, som tillater oss å referere til et objekt med ikke bare sitt eget navn, men navnene på noen av sine forfedre. Dette gir en stor grad av fleksibilitet i å skrive kode.

4 Skriv planet og stjerne klasser. Siden det meste av arbeidet har blitt gjort i de abstrakte OrbitalSystem og GravityObject klasser, vil Planet og Star klasser være enkelt.

public class Stjerne strekker OrbitalSystem {}

og

public class Planet strekker GravityObject {};

5 Skriv viktigste klassen. Din viktigste funksjonen skal se slik ut:

public static int main (String [] args) {
Stjerne s = ny stjerne (); // Opprett en ny stjerne.
s.add (ny Planet (20)); // Legg en planet til stjernens orbital system som går i bane i en avstand på 20 enheter.
s.add (ny Planet (66)); // Legg til en annen planet til stjernens orbital system som går i bane i en avstand på 66 enheter.

while (true) {
pinne()

}

}

Dette vil skape en stjerne og to går i bane rundt planeter, og vil sette dem i bevegelse.