Modellering et solsystem i Java , foruten å være morsomt , er en god øvelse for å illustrere og øve tenke 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 solsystem modell. Du trenger
Computer
Java Software Development Kit ( SDK )
tekst editor eller Java Integrated Development Environment ( IDE )
Vis flere instruksjoner
1
2
Lag GravityObject abstrakt klasse . Det er lurt å lage din GravityObject som en abstrakt klasse . Å erklære en klasse var abstrakte i Java indikerer til kompilatoren at vi ønsker denne klasse for å tjene som en modell for å bli brukt av andre klasser , men innenfor samme klasse ikke opprettes selv. Dette er fornuftig for solsystemet eksempel : det finnes ikke noe slikt som en " GravityObject " , men det er ting som planeter og stjerner , som er gjenstander som har og er påvirket av tyngdekraft . Du bare skriver programmeringen for det en gang. I objektorientert design , er denne egenskapen som heter Arv
Type dette inn i din GravityObject fil : en
public abstract class GravityObject {double xPosition ; dobbel yPosition , dobbelt degreeInOrbit , dobbelt distanceFromParent ;
.
GravityObject ( ) { this.distance = 0 ;}
GravityObject ( dobbel avstand ) { this.distance = avstand ;} }
p Dette er et enkelt eksempel , så du vil bare bruk av X og Y posisjonene av objektet , sammen med avstanden fra den overordnede og en variabel grad . Du kan senere opprette en abstrakt klasse , 3DGravityObject eller RelativisticGravityObject , og arve det har fra dette objektet . Dette vil tillate deg å legge detaljene for ting som endring.
3
opprette OrbitalSystem abstrakt klasse . Denne klassen vil også være abstrakt , men vil være mer sofistikert enn den GravityObject klassen
import java.util.ArrayList ; .
Public abstract class OrbitalSystem strekker GravityObject { private ArrayList barn = new ArrayList ( ) ; //objekter i systemet. De vil gå i bane rundt den overordnede
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 + = 1current.xPosition = this.xPosition + Math.cos ( degree/180 * Math.PI ) * current.distance , aktuell . yPosition = this.yPosition - Math.sin ( degree/180 * Math.PI ) * current.distance ;} ( se referanser 2 )
} }
klassen utvider GravityObject klasse . ArrayList inneholder alle GravityObjects , og erklærte sin variable privat, slik at du kan tvinge andre klasser å bruke funksjonen add , noe som sikrer at bare GravityObjects kan legges til matrisen . Dette illustrerer to andre viktige OOD konsepter i tillegg til arv . Den første er data gjemmer seg : ved å forsegle den bort , har du sørget for at andre deler av programmet ikke kan få tilgang til den og sette ugyldig informasjon inn i den. Den andre er polymorfisme , som tillater oss å referere til et objekt ved hjelp av ikke bare egne 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 er gjort i det abstrakte OrbitalSystem og GravityObject klasser , vil Planet og Star klassene være enkle
public class stjerne strekker OrbitalSystem { }; .
Og selg < p> public class Planet strekker GravityObject { };
5
Skriv viktigste klassen . Din viktigste funksjon skal se ut som følgende:
public static int main ( String [] args ) { stjerne s = new Star ( ), //Opprett en ny star.s.add ( ny Planet ( 20 ) ), //Legg til en planet til stjernens bane system som går i bane i en avstand på 20 units.s.add ( ny Planet ( 66) ), //Legg til en annen planet til stjernens bane system som går i bane i en avstand på 66 enheter .
while ( true) { s.tick (); }
}
p Dette vil skape en stjerne og to bane rundt planeter , og vil sette dem i bevegelse < . br >