Einzelnen Beitrag anzeigen
Alt 20.05.2015, 21:42   #1 (permalink)
Siremekuvo
Fingerabzähler
 

Registriert seit: 13.05.2015
Beiträge: 8

Siremekuvo befindet sich auf einem aufstrebenden Ast

Standard Wie kann ich den Code optimieren?

Hallo Leute,

bin ein wenig am Verzweifeln, weil ich folgenden Code nicht toll finde. Es funktioniert alles einwandfrei, aber ich habe das Gefühl, der objektorientierten Programmierung nicht gerecht zu werden.

Dies ist der Code:

Code:
using System.Windows.Forms;

    public class MyFlugzeugspiel
    {
   
        public static void Main(string[] args)
        {

            PictureBox flugzeug;

            MyFlugzeug myFlugzeug = new MyFlugzeug(global::Flugzeugspiel.Properties.Resources.MyRedFlugzeug, null, 0);

            flugzeug = myFlugzeug.getAircraft(10, 150, 98, 27);
       
            ScrollingBackground himmel = new ScrollingBackground("THE FLIGHTER", 1000, 650, flugzeug, null, flugzeug, 5);
                  

        }
    }
Code:
using System.Windows.Forms;
using System.Drawing;


    public abstract class Flugzeug : Form
    {
        
        protected PictureBox picBoxImage;
        private Bitmap myFlightPic;

        public Flugzeug(Bitmap myFlugzeug)
        {

            this.myFlightPic = myFlugzeug;

        }

        public PictureBox getAircraft(int x, int y, int width, int height)
        {

            // Flugzeug wird erschaffen
            picBoxImage = new PictureBox();
            picBoxImage.Image = myFlightPic;
            picBoxImage.BackColor = Color.Transparent;
            picBoxImage.SetBounds(x, y, width, height);

            return picBoxImage;

        }
    
    }
Code:
using System.Drawing;
using System.Windows.Forms;

    public class MyFlugzeug : Flugzeug
    {

        private int finenessOfAirplaneMotion;

        public MyFlugzeug(Bitmap myFlightPic, PictureBox picBoxImage, int finenessOfAirplaneMotion)
        : base(myFlightPic)
        {

            this.picBoxImage = picBoxImage;
            this.finenessOfAirplaneMotion = finenessOfAirplaneMotion;
       
        }
    
        protected void flugzeugBewegen_KeyDown(object sender, KeyEventArgs e)
        {

            if (e.KeyCode == Keys.W)
            {

                if (picBoxImage.Top > 10)
                {

                    picBoxImage.Top -= this.finenessOfAirplaneMotion;

                }

            }

            if (e.KeyCode == Keys.S)
            {

                if (picBoxImage.Top < 315)
                {

                    picBoxImage.Top += finenessOfAirplaneMotion;

                }


            }

        }

    }
Code:
using System.Drawing;

    public class FeindFlugzeug : Flugzeug
    {
    
        public FeindFlugzeug(Bitmap myFlightPic) : base(myFlightPic)
        {
        }   
    
    }
Code:
using System.Drawing;
using System.Windows.Forms;


    public class ScrollingBackground : MyFlugzeug
    {

        public ScrollingBackground(string name, int size1, int size2, PictureBox flugzeug, Bitmap myFlightPic, PictureBox picBoxImage, int finenessOfAirplaneMotion)
            : base(myFlightPic, picBoxImage, finenessOfAirplaneMotion)
        {

            // Windows-Fenster wird erschaffen
            this.Text = name;
            this.Size = new Size(size1, size2);
            this.StartPosition = FormStartPosition.CenterScreen;
            this.FormBorderStyle = FormBorderStyle.FixedSingle;
            this.MaximizeBox = false;
            this.Controls.Add(flugzeug);
            this.KeyDown += new KeyEventHandler(this.flugzeugBewegen_KeyDown);      
            this.ShowDialog();
     

        }

    }
Wer Java kann, kann auch C#. Ist genau dasselbe. Hoffe, ihr erschreckt nicht an der Fülle des Codes. Aber kürzer konnte ich es jetzt nicht zusammenfassen.

Dieser Code funktioniert einwandfrei.
Aber was mir nicht gefällt, ist folgendes:

Code:
     flugzeug = myFlugzeug.getAircraft(10, 150, 98, 27);
       
            ScrollingBackground himmel = new ScrollingBackground("THE FLIGHTER", 1000, 650, flugzeug, null, flugzeug, 5);
Ich möchte gerne, dass eben die Methode getAircraft so aussieht: getAircraft(10, 150, 98, 27, 5);
Die 5, also finenessOfAirplaneMotion sollte nicht der Konstruktor haben, sondern eben die Methode getAircraft. Die sollen doch zusammen sein, ist doch viel schöner.
Da ja vieles von der Hauptklasse Flugzeug, aber auch von MyFlugzeug geerbt wird, muss ich natürlich jedesmal, wenn der Konstruktor einer Subklasse aufgerufen wird, die der Hauptklasse auch aufrufen, ist ja klar, weil ja erst die Hauptklasse konstruiert werden muss, bevor ich überhaupt die Subklasse nutzen kann.

Aber, was mir dort nicht gefällt, ist folgendes:

Code:
     MyFlugzeug myFlugzeug = new MyFlugzeug(global::Flugzeugspiel.Properties.Resources.MyRedFlugzeug, null, 0);

     ScrollingBackground himmel = new ScrollingBackground("THE FLIGHTER", 1000, 650, flugzeug, null, flugzeug, 5);
Ständig diese Null-Lückenfüller. Wie kann man diese schrecklichen Lückenfüller umgehen?
Man kann doch z. B. keinen anderen Entwickler zumuten, meine Klassen zu verwenden, oder?

Oder ist das normal? Macht man das so?

Hänge momentan ein wenig, wie ich meinen Programmierstil wesentlich verbessere.

Ich würde mich echt auf eure etwaigen Codebeispiele und Antworten freuen und bedanke mich recht herzlich.

Ich wünsche euch was!

LG Siremekuvo
Siremekuvo ist offline   Mit Zitat antworten
Für diesen Beitrag bedankt sich:
MisterSchue (23.09.2016)