C# und Objektorientiertes Programmieren (Fernsehen als Objekt)

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Du solltest deinen Terminus beachten. Ein Feld ist eine Klassenvariable, eine Eigenschaft (in C#) die Kombination aus Feld und Getter/Setter.

Deswegen bin ich etwas verwirrt wenn du erst sagst

Der Fernseher soll mindestens folgende Eigenschaften haben: - Lautstärke, - Programm und - eingeschaltet beziehungsweise ausgeschaltet.

und dann

Ich soll nur über die Methoden der Klasse auf die Felder zugreifen. Das gilt auch für die Ausgabe der Werte.

Du sollst Eigenschaften benutzen aber dann doch über Methoden drauf zugreifen. Die Getter/Setter sind technisch zwar Methoden, aber das klingt so als wären normale Methoden gefordert (so wie mans in Java machen würde).

Ich würds so machen:

public class Fernseher
{
    public bool On { get; set; }
    public int Channel {get; set; }

    private int volume;
    public int Volume 
    {
        get 
        {
            return volume;
        }
        set
        {
             if(On)
                 volume = value;
         }
    }

    public override string ToString()
    {
        return "Angeschaltet: "+On+", Kanal: "+Channel+", Lautstaerke: "+Volume;
    }
}

Die Volume-Eigenschaft braucht für den setter eine eigene Logik um deine Bedingungen zu erfüllen, daher wird in Feld und getter/setter aufgeteilt um das zu ermöglichen.

Ändern der Werte geht durch Zugriff auf die Eigenschaften und Ausgabe indem du einfach das Objekt an die WriteLine der Console übergibst. Dann wird die überschriebene ToString-Methode aufgerufen die dir alles in die Ausgabe packt was du über das Fernseher-Objekt wissen willst

anakhha 
Fragesteller
 24.11.2013, 16:26

Hallo FaronWeissAlles, Hallo procoder42,

danke für euren Ansatz! FaronWeissAlles Du hast es aber schon profesionell gemacht! Ich brauche aber noch ne erklärung. Ich dachte in C# verwendet man eigentlich keine Getter- und Setter-Methoden mehr, sondern man benutzt Properties. Wie soll ich das für Volume dann lösen?

Danke für deine Geduld! :)

0
FaronWeissAlles  24.11.2013, 18:27
@anakhha

Das ist ja der Witz an der Sache. Properties sind blos eine andere Form von gekapselten Feldern. getter und setter Methoden "spammen" in Java den ganzen Quellcode zu und haben meist eine völlig primitive (und oft die gleiche) Logik (eben ein einfaches setzen oder auslesen des Wertes). In C# wurde deshalb eine andere Syntax eingeführt, nämlich { get; set;} um die immer gleichen Codeteile zu reduzieren. Weiterer Vorteil des Ansatzes ist, dass man ein Feld (was ja eine Variable ist) von außerhalb der Klasse eben genau wie eine Variable benutzen kann (Objekt.Property = Wert). Sollte der Setter doch mal von der Norm abweichen (so wie bei Volume) kann man ihn selbst definieren. Das ganze getter/setter-Gerümpel wird also blos verkürzt und "versteckt". Ob man dann noch von getter/setter-Methode spricht... man sagt eher get/set-Accessor anstatt Methode. Technisch ist es aber das gleiche

2
anakhha 
Fragesteller
 26.11.2013, 16:52
@FaronWeissAlles

Hallo FaronWeissAlles ,

Wie kann ich die { get; set; } nach dein Beispieln erweitern?

0
public class Fernseher {        
   private boolean status = False;      
   private int lautstarke = 0;      
   private int programm = 0;        

public void StatusAndern(){     
    status = !status ;  
}       
public void ProgrammAndern(){   
 if(status == True) programm++;
}       
}       

So in etwa sollte die Klasse fernseher aussehen ; die lautstärke ändern methode hab ich jetzt nicht drin und die programm schalt methode sollst du selber überarbeiten aber eigentlich sollte das so laufen .
ich programmier eigentlich java und hoffe das ich mit dem syntax alles beachtet habe

anakhha 
Fragesteller
 26.11.2013, 16:54

Hallo procoder42,

hast du vielleicht ein konkretes beispiel wie das Lautstärke methode aussehen könnte?

Danke dir schonmal für deine mühe!

0