Autor Beitrag
doppelpunktp
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 17.01.11 19:07 
Hi zusammen!

unzwar muss ich folgendes Programm entwickeln:

Entwickeln Sie eine Klasse CIPAdresse für die Speicherung einer IP-Adresse. Die IP-Adresse soll dabei in einem privaten Attribute vom Typ string gespeichert werden. Vor der Speicherung muss die IP-Adresse überprüft werden. Falls die IP-Adresse nicht korrekt ist, so soll eine Fehlermeldung ausgegeben und die Adresse "0.0.0.0" gespeichert werden.

Folgende überladene Konstruktoren sollen implementiert werden:
ausblenden C#-Quelltext
1:
2:
3:
public CIPAdresse(){...}
public CIPAdresse (int a, int b, int c, intd) {...}
public CIPAdresse(string s) {...}

Weiterhin sollen get- und set-Methoden implementiert werden (falls die IP-Adresse nicht gültig ist, soll ein false zurückgegeben werden).
ausblenden C#-Quelltext
1:
2:
3:
public bool SetIP(int a, int b, int c, int d){...}
public bool SetIP(string s){...}
public string GetIP() {...}

Es sollen nur einfach Strings benutzt werden.
Ebenfalls private Methoden für die Überprüfung.

Mein Problem ist, dass ich mit den überladenen Konstruktoren und Methoden nichts anzufangen weiß und nicht ganz hinter die vorgegebene Art der Programmierung komme.
Vielleicht hat jemand Zeit und Lust mir das ganze etwas zu erklären.
Ich bedanke mich schonmal im vorraus.

lieben Gruß
doppelpunktp

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 17.01.11 19:20 
Die Überladungen sollen ja nur eine Vereinfachung für den Anwender der Klasse sein, d.h. das man z.B. entweder
ausblenden C#-Quelltext
1:
2:
3:
IPAdresse ip1 = new IPAdresse(1234);
// oder alternativ
IpAdresse ip2 = new IPAdresse("1.2.3.4");

schreiben kann.
Intern sollst du dann aber die IP immer als string speichern (aus dem obigen Beispiel sollte jetzt klar sein, was zu machen ist).

P.S. Das "C" vor IPAdresse habe ich extra entfernt, da die sog. "Ungarische Notation" in C# verpönt ist - sag das deinem Tutor!

Für diesen Beitrag haben gedankt: doppelpunktp
doppelpunktp Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 17.01.11 19:53 
nunja das mit der vereinfachung hab ich schon verstanden, nur ehrlich gesagt fehlt mir der ansatz, was ich überhaupt mit den 3 überladungen nun anstellen soll, und ob es in die programm.cs oder die neu erstellte klasse kommt.
bis jetzt hab ich folgenden ansatz:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
namespace CIPAdresse
{
    class CIPAdresse
    {
        private string ipadresse;

        public CIPAdresse()
        {
            Console.WriteLine("Bitte geben Sie eine Ip-Adresse ein: ");
            ipadresse = Console.ReadLine();
        }
    }
}


Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
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: Mo 17.01.11 21:31 
Die Aufgabenstellung selbst klingt zwar schon etwas seltsam (Die ungarische Notation ist darin nicht das einzige, das in C# so nicht üblich ist *), aber sei's drum.

In der Klasse CIPAdresse sollte keine Benutzerschnittstelle verwendet werden. Sie enthält nur die Methoden zum Validieren einer IP-Adresse und für den Zugriff auf die Adresse. Alles, was mit der Konsole zu tun hat, gehört in die Program-Klasse. Dafür verwendet Program die andere Klasse und greift auf deren Methoden zu.

user profile icondoppelpunktp hat folgendes geschrieben Zum zitierten Posting springen:
ehrlich gesagt fehlt mir der ansatz, was ich überhaupt mit den 3 überladungen nun anstellen soll

Wenn eine Methode (oder ein Konstruktor) überladen ist, heißt das, dass er mit unterschiedlichen Parameterkombinationen aufgerufen werden kann. Wenn eine Klasse einen überladenen Konstruktur hat, kannst du sie auf verschiedene Weise instanzieren. In deiner Aufgabenstellung sollen also folgende Aufrufe möglich sein:

ausblenden C#-Quelltext
1:
2:
3:
CIPAdresse adresse1 = new IPAdresse();
CIPAdresse adresse2 = new IPAdresse(127001);
CIPAdresse adresse3 = new IPAdresse("127.0.0.1");

Um dem Benutzer der Klasse diese Möglichkeiten zu geben, musst du den Konstruktur überladen. Dafür definierst du einfach mehrere davon:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
class CIPAdresse {
  public CIPAdresse() {
    /* ... */
  }

  public CIPAdresse(int a, int b, int c, int d) {
    /* ... */
  }

  public CIPAdresse(String s) {
    /* ... */
  }
}

Jede der einzelnen Konstruktoren muss nun für sich implementiert werden, d.h. du musst durch Code angeben, was die Konstruktoren mit ihren Parametern machen sollen.

Das ganze funktioniert genau so auch bei Methoden.


user profile icondoppelpunktp hat folgendes geschrieben Zum zitierten Posting springen:
und ob es in die programm.cs oder die neu erstellte klasse kommt.

In der Program-Klasse gibt es weiterhin nur die Methode Main, die nun eben mit der Klasse CIPAdresse arbeitet.

________________
*
  1. Im Fehlerfall werden Exceptions geworfen, keine Fehlermeldungen angezeigt.
  2. Methoden, die Fehler in den Parametern feststellen, sollen nicht false zurückgggeben (Setter-Methoden geben überhaupt nie irgendetwas zurück), sondern ebenfalls Exceptions werfen.
  3. Anstatt Getter und Setter verwendet man Eigenschaften.
Wahrscheinlich werdet ihr mit der Zeit einige der genannten Sprachmerkmale noch kennen lernen. Allerdings lesen auch andere in diesem Forum und finden es vielleicht hilfreich, wenn schlechter Stil korrigiert wird.

Für diesen Beitrag haben gedankt: doppelpunktp
doppelpunktp Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 17.01.11 22:29 
danke schonmal, war sehr hilfreich bis jetzt!
sozusagen kann ich dann die überprüfung auf richtigkeit der ip-adressen in dem konstruktor coden?
ich seh grad, dass man dann auch mit substring und indexof auf die verschiedenen oktette überprüfen kann, nur was kommt in den ersten konstruktor? und was ist dann mit der programm.cs bzgl. meiner aufgabe? ruf ich dort nur noch die methoden auf?
ThoMa
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46
Erhaltene Danke: 3



BeitragVerfasst: Di 18.01.11 07:59 
Hallo Doppelpunkt,

ich würde demjenigen, der diese Aufgabe gestellt hat, einfach schreiben:

Bitte gucken Sie mal die Klasse IPAddress im Namespace System.Net an. Diese liefert die von Ihnen gewünschten Funktionalitäten. Eine eigene Implementierung ist hier weder notwendig noch sinnvoll.

Sollten eigene Funktionalitäten Unterstützung finden, die diese Klasse nicht anbietet, so würde ich empfehlen von dieser Klasse abzuleiten und entsprechende Methoden in der Ableitung zu implementieren.

Grüße
Thorsten
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 18.01.11 12:06 
user profile icondoppelpunktp hat folgendes geschrieben Zum zitierten Posting springen:
sozusagen kann ich dann die überprüfung auf richtigkeit der ip-adressen in dem konstruktor coden?

Könntest, du, sollst du aber offenbar nicht:

user profile icondoppelpunktp hat folgendes geschrieben Zum zitierten Posting springen:
Ebenfalls private Methoden für die Überprüfung.

Ich würde die verschiedenen Konstruktoren einfach das string-Feld, das die IP-Adresse speichert, füllen lassen und dann eine andere Methode aufrufen, die dieses Feld auf Richtigkeit prüft. Soweit klar?

user profile icondoppelpunktp hat folgendes geschrieben Zum zitierten Posting springen:
ich seh grad, dass man dann auch mit substring und indexof auf die verschiedenen oktette überprüfen kann

Genau, das ist der richtige Ansatz.

user profile icondoppelpunktp hat folgendes geschrieben Zum zitierten Posting springen:
nur was kommt in den ersten konstruktor?

Das hab ich mich auch schon gefragt. Eigentlich ist der parameterlose Konstruktor blödsinn, denn für eine IP-Adresse gibt es keinen Standardwert. Da aber im Fehlerfall laut Aufgabenstellung '0.0.0.0' verwendet werden soll, nehme ich an, dass dieser Wert im Standardkonstruktor gespeichert werden soll. Ist aber etwas unklar formuliert.

user profile icondoppelpunktp hat folgendes geschrieben Zum zitierten Posting springen:
und was ist dann mit der programm.cs bzgl. meiner aufgabe? ruf ich dort nur noch die methoden auf?

In der Aufgabenstellung steht nichts vom Hauptprogramm. Ich würde dort einfach alle Teile der Klasse verwenden, sei es nur, um sie zu testen (ist immer einge gute Idee, bevor man eine Arbeit abgibt ;)).

Grüße,
Yogu

@user profile iconThoMa: Wenn Lehrer immer neue Aufgabenstellungen, deren Lösung noch niemand erstellt hat, erfinden müssten, gäbe es wohl nur noch sehr wenige Informatiklehrer ;)
ThoMa
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46
Erhaltene Danke: 3



BeitragVerfasst: Di 18.01.11 13:52 
Hallo Yogu,

nein - man müsste sich nur Gedanken machen und dürfte nicht immer streng nach Schema-F unterrichten. Ich selbst gebe immer wieder entsprechende Schulungen im Bereich der Entwicklung. Die Microsoft Official Courses, welche zwar auch Aufgabenstellungen mit bringen, aber oftmals weiche ich davon ab und nehme Aufgaben, die mehr den Bedürfnissen und Schwerpunkten der Teilnehmer entsprechen.

Macht halt ein wenig Mühe und man muss verstehen was man unterrichtet, möglich ist das jedoch.

Grüße
Thorsten