Modelleren van een zonnestelsel in Java , naast plezier , is een goede oefening om te illustreren en te oefenen denken in termen van een aantal basisbegrippen in Object Oriented Design ( OOD ) , vooral overerving en polymorfisme . U kunt OOD concepten leren met een eenvoudige opbouw - je-eigen zonnestelsel model . Wat je nodig hebt Computer Java Software Development Kit ( SDK ) op tekst -editor of Java Integrated Development Environment ( IDE ) Toon Meer Aanwijzingen 1 < br > 2 Maak GravityObject abstracte klasse . U wilt uw GravityObject creëren als een abstracte klasse . Waarbij een klasse abstract te worden in Java geeft aan de compiler dat we willen deze klasse te dienen als een model om te worden gebruikt door andere klassen , maar de klasse mag niet worden gemaakt zelf . Dit is zinvol voor het zonnestelsel voorbeeld : er is niet zoiets als een " GravityObject " , maar er zijn dingen zoals planeten en sterren , die zijn objecten die zijn en worden beïnvloed door de zwaartekracht . Je schrijft alleen de programmering voor het een keer . In Object Oriented Design , wordt deze eigenschap heet Inheritance Type dit in uw GravityObject bestand : openbare abstracte klasse GravityObject { double Xposition ; double yPosition ; double degreeInOrbit , dubbele distanceFromParent ; . GravityObject ( ) { this.distance = 0 ; } GravityObject ( dubbele afstand ) { this.distance = afstand ; } } p Dit is een eenvoudig voorbeeld , dus je zult alleen de x en y posities van het object , met de afstand van zijn ouder en een variabele graad . Je zou een andere abstracte klasse , 3DGravityObject of RelativisticGravityObject later te creëren , en heb het erven van dit object . Dit zal u toelaten om de details toe te voegen voor de dingen die veranderen . 3 Maak de OrbitalSystem abstracte klasse . Deze klasse zal ook abstract , maar zal meer geavanceerd dan de GravityObject klasse import java.util.ArrayList ; . Openbare abstracte klasse OrbitalSystem breidt GravityObject { private ArrayList kinderen = new ArrayList ( ) ; //objecten binnen het systeem . Zij zullen baan om de bovenliggende public void add ( GravityObject kind ) { children.add ( kind ) ; } . Public void teek ( ) { for ( int x = 0 ; x < children.size ( ) ; x + + ) { GravityObject stroom = children.get ( x ) ; current.degree + = 1current.xPosition = this.xPosition + Math.cos ( degree/180 * Math.PI ) * current.distance ; huidige . yPosition = this.yPosition - Math.sin ( degree/180 * Math.PI ) * current.distance ; } ( zie referenties 2 ) op } } de klasse breidt de GravityObject klasse . De ArrayList bevat alle GravityObjects , en zijn variabele prive verklaard zodat u kunt dwingen andere klassen om de functie toe te voegen gebruiken , zodat alleen GravityObjects kan worden toegevoegd aan de array . Dit illustreert twee andere belangrijke OOD concepten naast erfenis. De eerste is data verbergen : door het afdichten van het weg , heb je ervoor gezorgd dat andere delen van het programma niet kan openen het en zet ongeldige gegevens in. De tweede is polymorfisme , die ons in staat stelt om te verwijzen naar een object met behulp van niet alleen zijn eigen naam , maar de naam van een van de voorouders . Dit zorgt voor een grote mate van flexibiliteit in het schrijven van code . 4 Schrijf planeet en ster klassen . Aangezien het grootste deel van het werk is gedaan in de abstracte OrbitalSystem en GravityObject klassen , zal de Planet en Star lessen zijn eenvoudig public class Star breidt OrbitalSystem { } ; . En verkopen public class Planet breidt GravityObject { } ; 5 Schrijf hoofdklasse . Uw belangrijkste functie moet er als volgt uitzien : public static int main ( String [ ] args ) op { Star s = nieuwe Star ( ) ; //Maak een nieuwe star.s.add (nieuw Planet ( 20 ) ) ; //Voeg een planeet om de ster van de orbitale systeem dat draait op een afstand van 20 units.s.add (nieuw Planet ( 66 ) ) ; //Voeg een planeet om de ster van de orbitale systeem dat draait op een afstand van 66 eenheden . while (true ) { s.tick ( ) ; } } Dit zal een ster en twee cirkelende planeten te creëren , en zal hen in beweging < . br >
|