Autor Beitrag
Benji2811
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 29.11.11 12:33 
Hallo,
ich habe ein kleines Problem. Möchte ein Programm schreiben, hänge aber bei den Objektbeziehungen fest. Ich habe eine Klasse "Photovoltaikmodul" für die im Konstruktor die Fläche gesetzt wird. Anschließend eine Klasse "Gebäude" wo ebenfalls im Konstruktor eine Variable Stromverbrauch gesetzt wird. Im Konstruktor möchte ich dem Gebäude aber auch ein Photovoltaikmodul mitgeben, sowie den von Gebäude abgeleiteten Klassen.

Mein bisheriger Code:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
class Photovoltaikmodul
    {
        private double fläche;

        public Photovoltaikmodul(double fläche)
        {
            this.fläche = fläche;
        }
    }

class Gebäude
    {
        public double stromverbrauch;

        public Gebäude(double stromverbrauch, *hier möchte ich auch ein Photovoltaikmodul setzen*)
        {
            this.stromverbrauch = stromverbrauch;
        }
    }

class Einfamilienhaus : Gebäude
    {
        public Einfamilienhaus(double stromverbrauch, *Photovoltaikmodul*)
            : base(stromverbrauch, *Photovoltaikmodul*)
        {
            this.stromverbrauch = stromverbrauch;
        }
    }

class Program
    {
        static void Main(string[] args)
        {
            Gebäude h1 = new Einfamilienhaus(5000); *hier soll eben noch ein new Photovoltaikmodul dazu!!!*
            Gebäude h2 = new Einfamilienhaus(5000);
        }
    }


Ich denke das sollte mit Aggregation gehen, kenne mich damit aber nicht wirklich aus und mit Literatur aus dem Internet bin ich auch nicht viel schlauer geworden.
Hoffe ihr könnt mir weiterhelfen, wenn möglich gleich den Code überschreiben/erweitern, damit ich endlich verstehe!?

Vielen Dank und lg,
Benji

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
mats74
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: Di 29.11.11 16:38 
Hallo Benji und :welcome:

Ich habe keine Ahnung, warum Du die Klassen so gebrauchen und zusammenstellen willst.
Ich habe die Klassen einfach mal so gesetzt, dass sie funktionieren.
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
    class Photovoltaikmodul
    {
        public double Photovoltaikmodul(double fläche)
        {
            double wert = fläche;
            return wert;
        }
    }

    class Gebäude
    {
        public double Gebäude(double stromverbrauch)
        {
            double wert = stromverbrauch;
            return wert;
        }
    }

    class Einfamilienhaus
    {
        public double[] Einfamilienhaus(double photovaltarik, double gebäude)
        {
            double[] wert = new double[2];
            // Mach was mit den Werten
            wert[0] = photovaltarik;
            wert[1] = gebäude;
            return wert;
        }
    } 

    class Program 
    {
        static void Main(string[] args) 
        {
            double Gebäudewert1 = Convert.ToDouble(new Einfamilienhaus().Einfamilienhaus(Convert.ToDouble(new Photovoltaikmodul().Photovoltaikmodul(1).ToString()), Convert.ToDouble(new Gebäude().Gebäude(1).ToString()))[0].ToString());
            double Gebäudewert2 = Convert.ToDouble(new Einfamilienhaus().Einfamilienhaus(Convert.ToDouble(new Photovoltaikmodul().Photovoltaikmodul(1).ToString()), Convert.ToDouble(new Gebäude().Gebäude(1).ToString()))[1].ToString());
        } 
    }

Ob diese Struktur sinnvoll ist für deine Anwendung, weiss ich nicht.
Vielleicht hilft Dir der Code bei deiner Problemstellung (die ich nach deiner Beschreibung nicht wirklich verstanden habe).

_________________
Gruss
mats74
Benji2811 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 29.11.11 17:03 
Danke für die Antwort, leider kann ich diesen Code nicht verwenden, die Struktur der Klasse"Photovoltaikmodul" habe ich fix vorgegeben und darf sie nicht verändern, auch für die Klassen Gebäude und deren abgeleiteten Klassen habe ich Vorgaben.
Das Problem ist, dass ich in der Klasse "Gebäude" das Photovoltaikmodul setzen möchte, also "public Gebäude(double stromverbrauch, Photovoltaikmodul)" um damit in der abgeleiteten Klasse Einfamilienhaus nur mehr sagen muss "public Einfamilienhaus(double stromverbrauch, Photovoltaikmodul) : base(stromverbrauch, Photovoltaikmodul)". Im Programm will ich dann noch zb. ein Haus erstellen mit Gebäude haus = new Einfamilienhaus(5000) +!!! new Photovoltaikmodul; Hab das so ähnlich mal gesehen, kann mich aber nicht mehr wirklich daran erinnern.

Neuer Code, habe einen Fehler entdeckt, vl hilft er so hervorgehoben etwas zu verstehen worauf ich hinaus will:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
class Photovoltaikmodul
{
public Photovoltaikmodul(double fläche)
{
this.fläche = fläche;
}
}

class Gebäude
{
public double stromverbrauch;

public Gebäude(double stromverbrauch, Photovoltaikmodul /*hier möchte ich ein Photovoltaikmodul setzen, also einfach sagen das Gebäude hat ein Photovoltaikmodul*/)
{
this.stromverbrauch = stromverbrauch;
}
}

class Einfamilienhaus : Gebäude
{
public Einfamilienhaus(double stromverbrauch, /*Photovoltaikmodul*/)
base(stromverbrauch, *Photovoltaikmodul*)
{
this.stromverbrauch = stromverbrauch;
}
}

class Program
{
static void Main(string[] args)
{
Gebäude h1 = new Einfamilienhaus(5000new Photovoltaikmodul /*hier soll eben das Modul erstellt werden und eine FLäche übergeben werden, zu new Photovoltaikmodul(80)*/
Gebäude h2 = new Einfamilienhaus(5000)...

}
}
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 29.11.11 19:28 
user profile iconBenji2811 hat folgendes geschrieben Zum zitierten Posting springen:
für die Klassen Gebäude und deren abgeleiteten Klassen habe ich Vorgaben.

Erlauben die, dass du deine Klasse Gebäude folgendermaßen erweiterst?

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
class Gebäude
{
    public double stromverbrauch;
    public Photovoltaikmodul photovoltaikmodul;

    // Konstruktor
}

Sonst kannst du einem Gebäude keine Photovoltaikmodul zuweisen. Wenn du das hat, kannst du im Konstruktur das Feld photovoltaikmodul genauso wie stormverbrauch setzen, musst nur noch die Namen anpassen.

user profile iconBenji2811 hat folgendes geschrieben Zum zitierten Posting springen:
um damit in der abgeleiteten Klasse Einfamilienhaus nur mehr sagen muss "public Einfamilienhaus(double stromverbrauch, Photovoltaikmodul) : base(stromverbrauch, Photovoltaikmodul)".

Das ist dann möglich bzw. nötig.
Benji2811 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 29.11.11 20:14 
Ja das geht bzw. ist nötig, soweit ich weiß nennt sich das dann Aggregation. Ich habe es auch schon so versucht, aber wie setze ich dann in der Klasse "Program" das new Photovoltaikmodul neben new Einfamilienhaus?
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 29.11.11 20:26 
user profile iconBenji2811 hat folgendes geschrieben Zum zitierten Posting springen:
wie setze ich dann in der Klasse "Program" das new Photovoltaikmodul neben new Einfamilienhaus?

Schlicht und einfach als zweiten Parameter :idea: Wie du das Objekt erstellst, hast du ja schon in deinen Kommentaren geschrieben.
Benji2811 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 29.11.11 20:52 
Also sollte das so gehen:
ausblenden C#-Quelltext
1:
Gebäude h1 = new Einfamilienhaus() new Photovoltaikmodul();					


Bei meinen bisherigen Versuche spuckt er mir Fehler aus, aber ich schau es mir nochmal genauer an.
Danke für die Hilfe bisher!!!
lg Benji
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 29.11.11 21:11 
Hallo,

so wie es aussieht, solltest du dich erstmal mit den Grundlagen von C# auseinandersetzen. Nur durch Hin- und Herkopieren von Codeschnipseln kommst beim Programmieren nicht weit. Ich würde dir das Galileo Openbook C# empfehlen, dort wird alles von Beginn an erklärt.

Grüße,
Yogu