Modellering ett solsystem i Java , förutom att vara roligt , är en bra övning för att illustrera och öva tänka i termer av vissa grundläggande begrepp inom objektorienterad design ( OOD ) , särskilt arv och polymorfism . Du kan lära dig OOD koncept med en enkel bygg - ditt - eget solsystem modell . Saker du behöver
Computer Review, Java Software Development Kit ( SDK ) katalog textredigerare eller Java Integrated Development Environment ( IDE )
Visa fler instruktioner
1
2
Skapa GravityObject abstrakt klass . Du vill skapa din GravityObject som en abstrakt klass . Deklarera en klass för att vara abstrakt i Java anger för kompilatorn att vi vill ha den här klassen för att tjäna som en modell som ska användas av andra klasser , men klassen bör inte skapas själv . Detta är logiskt för solsystemet exempel : det finns inget sådant som en " GravityObject " , men det finns saker som planeter och stjärnor , som är föremål som har och påverkas av gravitation . Du skriver bara programmeringen för det en gång . I objektorienterad design , är detta drag kallas Arv
Skriv detta i din GravityObject fil :
offentliga abstrakt klass GravityObject { double xPosition , dubbel yPosition , dubbel degreeInOrbit , dubbel distanceFromParent ;
.
GravityObject ( ) { this.distance = 0 ; }
GravityObject ( dubbel avstånd ) { this.distance = avstånd ; } }
Detta är ett enkelt exempel , så att du bara använda x -och y- positionerna av objektet , tillsammans med avståndet från sin förälder och en viss variabel . Du kan senare skapa en annan abstrakt klass , 3DGravityObject eller RelativisticGravityObject , och har den ärver från detta objekt . Detta gör att du kan lägga till detaljer för saker som förändras .
3
Skapa OrbitalSystem abstrakt klass . Denna klass kommer också att vara abstrakt , men kommer att vara mer sofistikerad än GravityObject klassen
import java.util.ArrayList , .
Offentliga abstrakt klass OrbitalSystem utökar GravityObject { private ArrayList barn = new ArrayList ( ) , //objekt inom systemet . De kommer att kretsa kring förälder
public void add ( GravityObject barn ) { children.add ( barn ) ;} .
Public void tick ( ) {for ( int x = 0 , x < children.size ( ) ; x + + ) { GravityObject ström = children.get ( x ) , current.degree + = 1current.xPosition = this.xPosition + Math.cos ( degree/180 * Math.PI ) * current.distance ; ström . yPosition = this.yPosition - Math.sin ( degree/180 * Math.PI ) * current.distance ;} ( se referenser 2 ) katalog
} }
klassen utökar GravityObject klassen . Den ArrayList innehar samtliga GravityObjects , och förklarade sin variabla privat så att du kan tvinga andra klasser att använda funktionen add , säkerställer att endast GravityObjects kan läggas till i arrayen . Detta illustrerar två andra viktiga OOD begrepp förutom arv . Den första är uppgifter gömmer : genom att täta bort , har du sett till att andra delar av programmet inte kan komma åt dem och lägg ogiltig information i den . Den andra är polymorfism , som tillåter oss att referera till ett objekt med hjälp av inte bara sina egna namn , men namnen på någon av sina förfäder . Detta möjliggör en stor flexibilitet i att skriva kod .
4
Skriv planet och klasser stjärna . Eftersom det mesta av arbetet har gjorts i abstrakta OrbitalSystem och klasser GravityObject kommer planeten och klasser Star vara enkel
public class Star utökar OrbitalSystem { }; .
Och sälja
public class Planet utökar GravityObject { };
5
Skriv huvudklass . Din huvuduppgift bör se ut så här :
public static int main ( String [] args ) { Star s = ny stjärna ( ) , //Skapa en ny star.s.add ( ny Planet ( 20 ) ) , //Lägg till en planet till stjärnans omloppsbana system som kretsar på ett avstånd av 20 units.s.add ( nytt planet ( 66 ) ) , //Lägg till en annan planet till stjärnans omloppsbana system som kretsar på ett avstånd av 66 enheter .
while ( true ) { s.tick ( ) ;}
}
Detta kommer att skapa en stjärna och två kretsande planeter , och kommer att sätta dem i rörelse < . br > Addera ditt