Autor |
Beitrag |
doppelpunktp
Hält's aus hier
Beiträge: 5
|
Verfasst: 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:
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
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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!
Für diesen Beitrag haben gedankt: doppelpunktp
|
|
doppelpunktp 
Hält's aus hier
Beiträge: 5
|
Verfasst: 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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: 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.
Für diesen Beitrag haben gedankt: doppelpunktp
|
|
doppelpunktp 
Hält's aus hier
Beiträge: 5
|
Verfasst: 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
      
Beiträge: 46
Erhaltene Danke: 3
|
Verfasst: 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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: 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
      
Beiträge: 46
Erhaltene Danke: 3
|
Verfasst: 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
|
|
|