Brauche Tipps zu OOP

regaa

Grünschnabel
Code:
public class Haupt
{
public static void Main()
{
 
TaschenRechnerFenster Fenster=new TaschenRechnerFenster();
 
Application.Run(Fenster);
 
}
 
}
 
public class TaschenRechnerFenster : Form
{ 
private static Button b1;
private static Button b2;
...




public TaschenRechnerFenster()
{
this.Text="TachenRechner";
this.Width...
 
InitComponents();
Controls.Add(b1);
Controls.Add(b2);
...


}
 
public static void InitComponents()
{
b1=new Button();
b1.Text="1"...
b1.Click+=new EventHandler(rechnen);
 
b2=new Button();
...

b2.Click+=new EventHandler(rechnen);
.... 
 
opplus=new Button();
...

opplus.Click+=new EventHandler(rechnen);
 
opminus=new Button();
...
opminus.Click+=new EventHandler(rechnen);
...
}
 
 
 
public static void rechnen(object sender, EventArgs e)
{
int ziffer=0;

if (sender==b0)
{
ziffer=0;
}
else if (sender==b1)
{
ziffer=1;
}
 
else if (sender==b2)
{
ziffer=2;
}
 
else if (sender==b3)
{
... 
 
 
if (turn==2)
{
zahl2=ziffer;
op=op;
turn=3;
}
 
 
 
 
 
if (turn==1)
{
 
if (sender==opplus)
{
op=0;
turn++;
}
 
else if (sender==opminus)
{
op=1;
turn++;
}
...
}
 
if (turn==0)
{
 
if (ziffer!=0)
{
zahl1=ziffer;
turn++;
}
 
else
{ 
if (sender==opplus)
{
 
zahl1=zahl1+zahl2;
op=0;
turn=turn+2;
}
 
else if (sender==opminus)
{
zahl1=zahl1+zahl2;
op=1;
turn=turn+2;
}
...
}
}
 
if (turn==3)
{
if (sender==gleich)
{
Console.WriteLine("z1: "+zahl1+" z2: "+zahl2+" turn: "+turn);
if (op==0)
erg.Text=Convert.ToString(zahl1+zahl2);
else if (op==1)
erg.Text=Convert.ToString(zahl1-zahl2);
...

turn=0;
zahl1=0;
zahl2=0;
}
}
}
}

Das ist ein absoluter Newbie Code. Ich hatte bisher nur was mit prozeduralen Sprachen zu tun, könnt ihr mir vielliecht 1 , 2 Tipps geben was ich hätte wirklich, wirklich anders machen müssen um ansatzweise an OOP ranzukommen. Ich weiss ich werde nicht drumrum kommen mir ein Buch zu kaufen, aber da mich die Thematik so interessiert bitte ich auch mir jetzt schon paar Tipps zu geben. KEINEN CODE, nur Tipps.

Bei diesem Programm handelt es sich um einen Taschenrechner. Wenn ihr euch den Code nicht antun wollt, dann sagt mir wenigstens wie ihr so ein Programm aufbauen würdet.
 
Zuletzt bearbeitet:
Hallo.

Gleich vorneweg mal einen Link zu einem meines Erachtens nach gut gelungenen Artikel über OOP.
Dann vielleicht noch einen Ratschlag bezüglich der Datenkapselung, eines der Grundprinzipien der OOP:
Bei mir persönlich hat sich das Prinzip bewährt, alle Members einer Klasse, also die innerhalb der ganzen Klasse gültigen, globalen Variablen niemals als public oder protected, sondern immer als private zu deklarieren (wie du es ja gemacht hast);
den Zugriff auf diese Variablen regle ich dann mit get und set, also indem ich eine sogenannte Property für jeden Member anlege.
Ich weiss, du wolltest keinen Code, aber hier nur mal zur Verdeutlichung, da ich nicht weiss, ob du das in deinem Code hier irgendwo so machst: :-)
Code:
    class Tour
    {
    	/* Member-Variable */
    	private int _tourNumber;
    	.
    	.
    	.
    	/* zugehörige Property */
    	public int tourNumber
    	{
    		get {return _tourNumber;}
    		set {_tourNumber = value;}
    	}
    	.
    	.
    	.
    }
    .
    .
    .
    /* irgendwo anders im Code (in einer anderen Klasse) */
 Tour myTour = new Tour();
 myTour.tourNumber = 4;			 //Die 4 wird dann als value im set übernommen
    .
    .
    .

Außerdem solltest du dir die Verwendung von Regionen angewöhnen, um deinen Code für dich selber lesbarer zu machen: Eine Region je für die Members, die Properties sowie eine für jede Methodenart (Konstruktoren, Destruktoren, Accessoren, Mutatoren und Funktionen).

Also sonst sieht dein Code schon mal nach "vielversprechend nahe an OOP" aus. Allerdings rate ich dir generell: lies obig angegebenen Artikel und kauf dir ein gutes Buch zur OOP, daraus (und durch konsequentes Anwenden der dort angegebenen Konventionen) lernt man solche Dinge schneller. ;)

Gruß, Niko
 
Zuletzt bearbeitet:
Joa, vielen Dank. Das hilft mir doch schon sehr weiter. Werde mir den Link auch noch anschauen sobald ich zu Hause bin und mir sobald es geht ein Buch zulegen, obgleich ich Erfahrung in diversen Websprachen hab und das basic von c beherrsche und ansonsten schon größere Projekte in Basic nachweisen kann, aber das OOP ist mir völlig neu (Da ich auch nie Klassen in PHP verwendet hab).

Vielen Dank.
 
Zurück