Modeling et solsystem i Java , udover at være sjovt, er en god øvelse til at illustrere og praktisere tænke i nogle grundlæggende begreber i objektorienteret design ( OOD ) , især arve-og polymorfi . Du kan lære OOD begreber med en simpel bygge -din-egen solsystem model. Hvad du har brug
Computer
Java Software Development Kit ( SDK)
tekst editor eller Java Integrated Development Environment (IDE)
Vis Flere Instruktioner
1 < br > 2.
Opret GravityObject abstrakt klasse . Du ønsker at oprette din GravityObject som en abstrakt klasse. Om en klasse til at være abstrakt i Java viser den compiler , at vi ønsker denne klasse til at fungere som en model, der anvendes af andre klasser, men klassen bør ikke skabes selv. Det giver mening for solsystemet eksempel: der er ikke sådan noget som en " GravityObject " , men der er ting som planeter og stjerner , der er objekter, der har og er påvirket af tyngdekraften . Du skal kun skrive programmeringen for det én gang. I objektorienteret design , er dette træk kaldes Inheritance
Type dette i din GravityObject fil : Hej
offentlig abstrakte klasse GravityObject { double xPosition , dobbelt yPosition , dobbelt degreeInOrbit , dobbelt distanceFromParent ;
.
GravityObject () { this.distance = 0; }
GravityObject (dobbelt afstand) { this.distance = afstand ;}}
p Dette er et simpelt eksempel , så du kun bruge x og y positionerne af objektet , sammen med afstanden fra dets forælder og en grad variabel . Du kan senere oprette en anden abstrakt klasse , 3DGravityObject eller RelativisticGravityObject og har det arver fra dette objekt. Dette vil tillade dig at tilføje detaljerne for ting, der ændrer sig.
3
oprette OrbitalSystem abstrakte klasse . Denne klasse vil også være abstrakt , men vil være mere sofistikerede end GravityObject klassen
import java.util.ArrayList ; .
Offentlig abstrakte klasse OrbitalSystem udvider GravityObject { private ArrayList børn = new ArrayList ( ) //objekter i systemet. De vil kredser den forælder
public void add ( GravityObject barn ) { children.add ( barn );} .
Public void kryds () { 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 referencer 2 )
}}
klassen udvider GravityObject klasse . Den ArrayList besidder alle GravityObjects og erklærede sin variable private , så du kan tvinge andre klasser til at bruge add -funktion, der sikrer, at det kun GravityObjects kan føjes til array . Dette illustrerer to andre vigtige OOD begreber udover arv. Den første er data skjul : ved at forsegle den væk , har du sikret, at andre dele af programmet ikke kan få adgang til det og sætte ugyldige oplysninger i den. Den anden er polymorfisme , som giver os mulighed for at henvise til et objekt ved hjælp af ikke blot sine egne navne, men navnene på nogen af sine forfædre. Dette giver mulighed for en stor fleksibilitet i at skrive kode .
4
Skriv planet og stjerne klasser. Da det meste af arbejdet er blevet gjort i den abstrakte OrbitalSystem og GravityObject klasser , vil Planet og Star klasser være enkle
offentlig class Star udvider OrbitalSystem { }; .
Og
< p> public class Planet udvider GravityObject { };
5
Skriv vigtigste klasse . Din primære funktion skal se ud som følgende:
offentlige statiske int main ( String [] args ) { stjerne s = new Star ( ) //Opret en ny star.s.add (ny Planet ( 20) ) //Tilføj en planet til stjernens orbital system, der kredser i en afstand af 20 units.s.add (ny planet ( 66) ) //Tilføj en anden planet til stjernens orbital system, der kredser i en afstand af 66 enheder .
while ( true) { s.tick ( );}
}
Dette vil skabe en stjerne og to kredsende planeter og vil sætte dem i bevægelse < . br >