Entwickler-Ecke
Basistechnologien - IP-Adressen überprüfen
doppelpunktp - Mo 17.01.11 19:07
Titel: IP-Adressen überprüfen
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:
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).
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
Th69: C#-Tags hinzugefügt
Th69 - 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
C#-Quelltext
1: 2: 3:
| IPAdresse ip1 = new IPAdresse(1, 2, 3, 4); 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!
doppelpunktp - 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:
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
Christian S.: Code- durch C#-Tags ersetzt
Yogu - 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.
doppelpunktp hat folgendes geschrieben : |
| 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:
C#-Quelltext
1: 2: 3:
| CIPAdresse adresse1 = new IPAdresse(); CIPAdresse adresse2 = new IPAdresse(127, 0, 0, 1); 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:
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.
doppelpunktp hat folgendes geschrieben : |
| 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.
________________
*
- Im Fehlerfall werden Exceptions geworfen, keine Fehlermeldungen angezeigt.
- Methoden, die Fehler in den Parametern feststellen, sollen nicht false zurückgggeben (Setter-Methoden geben überhaupt nie irgendetwas zurück), sondern ebenfalls Exceptions werfen.
- 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.
doppelpunktp - 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 - 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 - Di 18.01.11 12:06
doppelpunktp hat folgendes geschrieben : |
| sozusagen kann ich dann die überprüfung auf richtigkeit der ip-adressen in dem konstruktor coden? |
Könntest, du, sollst du aber offenbar nicht:
doppelpunktp hat folgendes geschrieben : |
| 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?
doppelpunktp hat folgendes geschrieben : |
| ich seh grad, dass man dann auch mit substring und indexof auf die verschiedenen oktette überprüfen kann |
Genau, das ist der richtige Ansatz.
doppelpunktp hat folgendes geschrieben : |
| 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.
doppelpunktp hat folgendes geschrieben : |
| 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
@
ThoMa: 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 - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!