Zur Abwechslung mal etwas Sourcecode
Hi Leute,
ihr habt sicher schon bemerkt, dass hier seit Neujahr nicht viel passiert. Ich könnte euch jetzt die Ohren voll jammern, wie viel Arbeit ich habe und bla bla bla... Stattdessen mache ich hier lieber ein kleines Experiment. Inspiriert vom lieben Angelslayer, beginne ich auch mal damit, etwas Sourcecode um mich zu werfen.
Zuerst muss ich euch aber noch etwas über meinen Kollegen erzählen:
Er macht den Job schon länger als ich und hat wesentlich mehr Erfahrung. Früher großer Delphi Fan ist er zusammen mit mir jetzt bei C# gelandet. Ich hatte schon ein wenig .NET Vorbelastung, da ich vorher VB.Net programmierte. Ich wollte weg von dieser Kindersprache (nein, das meine ich nicht ernst, viele Personalchefs allerdings schon) und er wollte auch mal etwas Neues testen. So kamen wir vor ca. 4 Jahren zu C# und sind immer noch begeistert dabei.
Da wir sehr unterschiedliche Stile haben, entwickeln sich immer wunderbare Diskussionen darüber, wie man was besonders elegant, verständlich oder optimal implementiert. Die Gegenstände dieser Diskussionen und deren Lösung will ich euch in dieser kleinen Kategorie vorstellen.
Im ersten Teil geht es um das Singleton man könnte es auch Einzellstück nennen. Es ist eine Klasse die immer nur genau ein mal instanziert werden kann. Sie verhält sich in etwa wie eine globale Variable, was nüchtern betrachtet auch der größte Nachteil bei einer objektorientierten Sprache sein kann.
Dazu switche ich mal in Codeview
?//Die Klasse ist sealed,
//so kann man wirksam verhindern, dass andere Objekte
//von ihr erben.
sealed class clsHaus {
//Beim ersten Aufruf, wird eine Instanz der clsHaus erzeugt
//und hier gespeichert. Ab jetzt kann man auf die
//Klasse und alle Funktionen global zugreifen.
private static clsHaus instance = null;
//Der private Konstruktor verhindert, dass die Klasse von
//außen instanziert wird.
private clsHaus() { }
//Im geter wird, falls die Klasse noch null ist,
//eine neue Instanz erzeugt.
public static Singleton Instance {
get {
//Ist die Klasse noch null
if (instance==null) {
//Wird eine neue Instanz erzeugt
instance = new clsHaus();
}
//ab jetzt wird genau diese Instanz immer zurück gegeben
return instance;
}
}
Achtung, bei dieser Implementierung fehlt noch einiges, um das Teil wirklich sicher zu beherrschen. In dieser Version zum Beispiel, ist unser Singleton noch nicht thread-safe. Falls es euch interessiert, kann ich euch in den Kommentaren noch ein bissel was dazu erzählen. Ich denke halt an meine Leser
Wozu benötigt man das jetzt?
Kurz, für alle Aufgaben die bei großen Projekten (manchmal auch kleine) zenral verwaltet werden müssen. Dazu zählen zum Beispiel Logger, globale Variablen (auch wenn diese böse sind), Verwaltung von Datenklassen und so weiter.
Ich benutze es zum Beispiel für eine Bandanlage. Jedes Teil auf dem Band bekommt ein Objekt zugeordnet, dieses wird von einer solchen Klasse verwaltet. Auf dem Band gibt es mehrere Stationen, die Daten zu den Objekten benötigen. Ich kann an jeder Station auf dem Band auf jedes Objekt und dessen Daten zugreifen. Außerdem können Datenbankzugriffe zentral in eben dieser Klasse vorgenommen werden, was wiederum für übersichtlichen Code und einfache Transaktionen sorgt.
Jetzt seid ihr gefragt. Was haltet ihr von dem Singleton? Benutzt ihr es selbst? Ist es böse? Macht ihr es ganz anders? Habe ich etwas nicht bedacht? Habt ihr noch Fragen zur Implementation oder wollt ihr mehr Beispiele? Dann schreibt mir einfach einen Kommentar.
thinkJD
Papa, warum spinnt der Fernseher?
Kennt ihr das, ihr habt Lust etwas zu Coden aber keine Idee?
Wie wäre es mit dem IR-Toy
Es handelt sich dabei um eine kleine Paltine, bestückt mit einem Microcontroller und einem Infrarot Sender/Empfänger. Hier mal ein kurzer Features Überblick:
- RC5 IR-Dekoder
- IR-Signal logic analyzer
- Signale aufnehmen und wieder abspielen
- USB-Anschluss
- Das Beste: Die Hardware ist Open Source
- Mit 17,15$ ist es fast geschenkt.
Mit dem "Spielzeug" lässt sich allerlei anfangen.
Man könnte seinen PC mit IR Signalen fernsteuern, seinen Fernseher per Twitter schalten oder einen Störsender für die Fernbedienung basteln.
Beim anstöpseln meldet sich das kleine Platinchen als virtueller Com Port, so könnt ihr mit so ziemlich jeder Sprache eine App drum herum Coden. Da es eine recht große Community um das Teil gibt, sind auch genügend Beispielcodes vorhanden.
Beziehen könnt ist Infrared Toy hier -> Klick
thinkJD
