{the magic lies between the brackets}

Monat: September 2014 (Seite 1 von 1)

UML Beziehungen und ihre Umsetzung im Code

Wer Software plant und entwickelt wird unweigerlich mit der Unified Modeling Language (kurz UML) in Berührung kommen.
Ich werde in  diesem Blog-Eintrag vor allem auf das Klassendiagramm, genauer auf die Beziehungen der einzelnen Klassen eingehen.

Das Klassendiagramm:

UML_ClassdiagramDas Klassendiagramm zeigt  Klassen eines Namespaces an und deren jeweilige Abhängigkeiten. Es handelt sich um eine statische Darstellung, da lediglich die Attribute und Methoden, sowie die Verbindungen der Klassen untereinander dargestellt werden. Es wird nicht gezeigt, wie diese Verbindungen stattfinden.

Darstellungselemente:

Zur Realisierung eines Klassendiagramms stehen folgende Formen und Notationen zur Verfügung

Klasse

ClassEine Klasse wird mit als Rechteck dargestellt und enthält Attribute und Methoden (Operationen). Sollte es sich um eine abstrakte Klasse handeln, so wird der Klassennamen kursiv dargestellt

Zusätzlich werden die in der Klasse enthaltenen Attribute und Operationen (bspw. Methoden) mit deren Daten- oder ggf. Rückgabetypen und Sichtbarkeiten dargestellt.

Class_ExplanationClass_AttrOperation

Zur Darstellung der Sichtbarkeit von Attributen und Funktionen bietet UML folgende Zeichen:

  • + steht für public, also eine öffentliche Funktion/ein öffentliches Attribut
  • # steht für protected, also eine geschützte Funktion/ein geschütztes Attribut
  • – steht für eine private Funktion/ein privates Attribut

Wie Anfangs erwähnt, stellt das Klassendiagramm auch die Beziehungen der Klassen untereinander dar. Ich werde in diesem Beitrag auf folgende Beziehungen eingehen und zu der jeweiligen Beziehung ein Codebeispiel (C#) geben:

  • Vererbung
  • Binäre Assoziation (zwei Klassen sind beteiligt)
  • Aggregation
  • Komposition
Vererbung:

Eine Vererbung (engl.: Inheritance) ist auch als „Ist-Ein-Beziehung“ oder „Ist-Implementiert-Als-Beziehung“ bekannt.

Als Beispiel dienen hier die Klassen Employee und Manager
Da ein Manager auch ein Mitarbeiter (Employee) ist, erbt die Klasse Manager von Employee
Dadurch werden Variablen, Felder und Methoden, welche nicht private sind in die erbende Klasse übernommen.
Achtung: Konstruktoren werden nicht vererbt und müssen daher manuell angesprochen werden:

public Manager(string _name):base(_name){ ... }

Die Umsetzung in C# würde wie folgt aussehen (Bild):

[spoiler title=“Employee-Klasse“ style=“fancy“ anchor=“BeispielVererbung“]

namespace Vererbung
{
    class Employee
    {
        static int staticID = 1;

        protected int ID = 0;
        protected string Name = "";

        public Employee(string _name)
        {
            CreateEmployee(_name);
        }

        protected void CreateEmployee(string _name)
        {
            staticID++;
            ID = staticID;
            Name = _name;
        }

        public int getID()
        {
            return ID;
        }

        public string getName()
        {
            return Name;
        }
    }
}

[/spoiler]

[spoiler title=“Manager-Klasse“ style=“fancy“]

namespace Vererbung
{
    class Manager:Employee
    {
        static int staticManagerID = 1;

        int ManagerID;

        public Manager(string _name):base(_name)
        {
            CreateManager();
        }

        private void CreateManager()
        {
            staticManagerID++;
            ManagerID = staticManagerID;
        }

        public int getManagerID()
        {
            return ManagerID;
        }
    }
}

[/spoiler]

(Binäre) assoziation:

Eine Assoziation ist eine beliebige Beziehung zwischen den Objekten von Klassen. Hier werden wir nur die binären Assoziationen (2 Klassen sind beteiligt) behandeln.

Dies ist eine gerichtete Assoziation, das bedeutet, dass Klasse 1 die Klasse 2 kennt, dagegen Klasse 2 nichts von Klasse 1 weiß. In der Beschreibung wird Beschrieben auf welche Weise die Objekte in Verbindung stehen

Links sehen wir eine bidirektionale binäre Assoziation, d.h. die Firma kennt seinen Mitarbeiter und der Mitarbeiter seine Firma.

Die Form der Assoziation sähe in der Programmierung wie folgt aus (Man beachte die Kommentierung):

[spoiler title=“Bidirektionale binäre Assoziation“ style=“fancy“ anchor=“BeispielAssoziation“]

public class Firma 
{ 
  public Mitarbeiter mitarbeiter; 
}

 public class Mitarbeiter 
{ 
  public Firma firma; 
}

public class Verzeichnis
{ 
  Mitarbeiter Mustermann = new Mitarbeiter(); 
  Firma  Musterfirma  = new Firma(); 
  Mustermann.firma  = Musterfirma;
  Musterfirma.mitarbeiter = Mustermann; 
  // Man beachte, dass die Objekte von Firma und Mitarbeiter in einer
  // weitern Klasse liegen und somit nicht voneinander abhängig sind
  // und somit weiterleben, auch wenn eines der Objekte zerstört wird
}

[/spoiler]

Aggregation:

Bei der Aggregation handelt es sich um eine spezielle Form der Assoziation. Sie ist auch als „Ganzes-Teil-Beziehung“ oder „Hat-Ein-Beziehung“ bekannt.
Darunter versteht man ein Objekt (Aggregatobjekt), welches aus verschiedenen Einzelteilen (Objekten) besteht, wobei diese nicht existenzabhängig sind (d.h. sie leben weiter, auch wenn das Aggregatobjekt zerstört wird.

Eine Beispiel für eine Aggregation wäre das Auto (als Ganzes) und ein Rad, als Teil.

[tabs]
[tab title=“Allgmeines Beispiel“]

public class Aggregatklasse
{
    ExistenzUnabhängigeKlasse objKlasse;
    public void doSomething(ExistenzUnabhängigeKlasse obj)
    {
      //Das Objekt der Klasse ExistenzUnabhängigeKlasse wird als Parameter übergeben 
      objKlasse = obj; 
	  // und ist somit noch existent wenn die Aggregatklasse zerstört wird
    }
}

[/tab]
[tab title=“Auto-Rad-Beispiel“]Wird nachgereicht…

[/tab]
[/tabs]

Komposition:

CompositionBei der Komposition handelt es sich um eine strenge Form der Aggregation. Das Kompositionsobjekt besteht, wie bei der Aggregation auch, aus mehreren Einzelteilen (Komponentenobjekte), welche jedoch im Gegensatz zur Aggregation mit der Zerstörung des Ganzen (Kompositionsobjekt) zerstört werden (Existenzabhängigkeit).
Damit ist auch die Kardinalität/Multiplizität auf Seite des Kompositionsobjekts immer 1. Das bedeutet, dass eine Komponente nur Teil eines Objekts sein kann. Somit wird sichergestellt, dass die Lebensdauer aller Objekte gleich ist. Die Kardinalität auf der Seite der Komponenten kann jedoch variable sein

Beispiel:
Ein Kunde einer Bank hat mindestens eine Anschrift und keine oder mehrere hinterlegte Bankverbindungen (kann per Rechnung zahlen).

CompositionExampleStirbt der Kunden, so wohnt er logischerweise nicht mehr und ist ebenso wenig ein Kunde der Bank. Seine Anschrift(en), sowie seine Bankverbindung(en) werden also zerstört

Die Umsetzung im Code würde wie folgt aussehen:

[spoiler title=“Codebeispiel Komposition“ style=“fancy“ anchor=“BeispielKomposition“]

public class CompositionClass
{
    SomeUtilityClass objSC = new SomeUtilityClass(); //Das Objekt der Klasse
    // existiert lediglich in der CompositionClass und wird mit dem Objekt der
    // CompositionClass vernichtet

    public void doSomething()
    {
        objSC.someMethod();
    }
}

[/spoiler]

Die ersten Wochen im nebenberuflichen Studium an der FOM

Bereits nach meinem Abitur habe ich mich mit dem Thema Studium beschäftigt, wollte zu diesem Zeitpunkt jedoch kein Studium beginnen, da ich erst einmal ein wenig flüssig werden wollte und zudem auch (ich bin ehrlich) keine Lust auf noch mehr „Schule“ hatte.

Also entschied ich mich für eine Ausbildung als Fachinformatiker, was im Nachhinein betrachtet auch die richtige Entscheidung war. Ich konnte während meiner Ausbildung einige Erfahrung im ERP-Umfeld (Dynamics NAV) sammeln und erhielt auch erste Einblicke in den wirklichen Ablauf eines Unternehmens.

Schon während meiner Ausbildung festigte sich mein Entschluss, dass ich nach meiner Ausbildung studieren möchte und so machte ich mir erste Gedanken zu diesem Thema.
Ich zuerst mit dem Gedanken ein Vollzeitstudium zu absolvieren und als Minijobber weiterhin beim ACE beschäftigt zu bleiben oder mich für ein Fernstudium einzuschreiben (wobei ich diese Alternative nicht favorisierte)

Da ich jedoch als Ersatz für einen in altersbedingt (Rente) ausscheidenden Kollegen ausgebildet wurde, war mein Ausbilder von dieser Idee nicht begeistert und schlug mir ein nebenberufliches Studium an der FOM in Stuttgart vor.

Die Webseite machte einen guten Eindruck, das ZEIT-Ranking der Hochschule war gut und auch die Erfahrungsberichte machte einen guten Eindruck. So besuchten mein Ausbilder und ich einen Info-Abend an der FOM und waren überzeugt.

So schrieb ich mich an der FOM für das Wintersemester 2014 im Fach Wirtschaftsinformatik (B.Sc.) ein und am 5. September 2014 startete offiziell das Semester (nach der Eröffnungsveranstaltung am 03.09.13) mit der ersten Vorlesung.

Im ersten Semester haben wir übrigens folgende Studienfächer:

  • Management Basics
  • E-Business
  • Prozedurale Programmierung
  • IT-Basics

WIESO WIRTSCHAFTSINFORMATIK?

Während meiner Ausbildung wurden immer wieder Änderungen am unserem ERP-System vorgenommen – Viele davon im Bereich der Buchhaltung. Programmiertechnisch verstand ich die Änderungen, jedoch fehlte mir an vielen Stellen der betriebswirtschaftliche Hintergrund. Somit wollte ich dieses Wissen erweitern ohne mich jedoch komplett von der Informatik zu entfernen.

Die Wirtschaftsinformatik war somit der perfekte Zwischenweg um dies zu bewerkstelligen

ABLAUF des studiums

Bei dem Studium an der FOM handelt es sich um ein Präsenzstudium. Vor Beginn des Semesters wurden die Skripte über das Onlineportal (Online Campus) verteilt. Diese sollte man ausdrucken und während der Vorlesung bereithalten, sodass man sich ggf. auf einer Seite Notizen machen kann

Die Benotung der einzelnen Fächer erfolgt durch s.g. Scientific Abstracts und einer Klausur. Bei dem Scientific Abstract handelt es sich um eine kurze prägnante Zusammenfassung (max. 2 Seiten) zu einem bestimmten Thema. Während des Semesters werden 4-5 Themen genannt, zu denen man sich vorbereiten sollte (Hausarbeit). Zu einem genannten Termin wird dann eines dieser Themen gewählt und es wird unter Prüfungsbedingungen eine Zusammenfassung zu dem Thema geschrieben.

Diese wird mit 20% gewichtet. Zudem schreibt man Klausur, welche mit 80% gewichtet wird

DIe erste vorlesung

Unsere erste Vorlesung war im Fach Management Basics. Hier wurden uns bisher vor allem betriebswirtschaftliche Grundlagen vermittelt (bspw. Unternehmensformen, SWOT-Analyse, Target Costing…), auf welche in späteren Modulen aufgebaut wird.

Zu Beginn nahm ich zu den Vorlesungen im Fach Management Basics mein Tablet mit Tastatur und das Skript in digitaler Form mit. In dem PDF habe ich dann digitale Notizen hinzugefügt.

Mittlerweile habe ich das Skript jedoch gedruckt, denn es ist wesentlich schneller und einfacher die Notizen handschriftlich auf das Skript zu schreiben.

Man sollte sich auch nicht der Illusion hingeben, dass es so wie bisher in der Schule läuft. Der Prof wird euch nicht sagen, was ihr aufschreiben sollt und was nicht. Ihr müsst selbst die wichtigen Dinge selbst filtern und zu Papier bringen.

Lumia Cyan Update (Windows Phone 8.1) auf dem Lumia 520 installieren

Vor einigen Tagen wurde der Status des Cyan Updates für das Lumia 520 auf der Nokia Seite auf „Avaliable“ geändert und sollte somit den Nutzern zur Verfügung stehen.
Die bisherigen Updates, auch die der Developer Preview wurden über das Windows Phone eigene Updatemenü installiert.
Allerdings fand das Lumia dieses Cyan Update einfach nicht – zumindest nicht als OTA.
Im Netz ist dieses Problem kaum beschrieben. Da aber die Versionen in Mitteleuropa alle die gleichen sind und das Update in anderen Ländern wohl ohne Probleme ausgerollt wurde, muss es entweder etwas mit dem deutschen Server zu tun haben, oder mit meinem Smartphone.
Wie bekomme ich also das Update auf mein Lumia?
Microsoft hat das sogenannte Nokia Software Recovery Tool still und heimlich veröffentlicht.
Mit diesem Tool kann man das Update dann aufspielen, aber ACHTUNG! Es werden alle Daten auf dem Gerät gelöscht. Deshalb vorher ein Backup über die Windows Phone eigene Backup-Funktion ausführen. Dieses kann man dann nach der Installation einspielen.
1. Nokia Software Recovery Tool (NSRT) herunterladen und installieren.
2. Lumia 520 mit dem Rechner über ein microUSB Kabel verbinden
3. Das NSRT starten, es erkennt dann automatisch das angeschlossene Gerät und sucht das aktuellste Update für dieses.

Nokia Software Recovery Tool Update found
4. Das Gerät muss  über mindestens 1,7GB freien Speicher verfügen (lokal, nicht auf der SD Karte)

Anschließend einfach den Anweisungen folgen. Das Update ist 1,56GB groß, d.h. der Download kann je nach Downloadgeschwindigkeit dauern.

Danach kann man das Handy neu einrichten, solltet ihr das Backup getätigt haben, so wird euch dieses bei der Ersteinrichtung angezeigt und ihr könnt es zurückspielen.

Das war’s, nun habt ihr das Lumia Cyan Update auf eurem Lumia 520.

Lumia_Cyan_520

Wieso in der Mathematik 0,(9) also 0,999999…. exakt 1 ist

Im Zuge meines Studiums bin ich mit der weniger bekannten Tatsache konfrontiert worden, dass math_992.5_3293f03d5fcefabfff40f26cba81fa27, also math_994_5a60d4a104cfbb73fb653d27f231a4b8 exakt gleich 1 ist.
Wieso?

Stellen wir uns einmal diese Zahl vor:
math_994_5a60d4a104cfbb73fb653d27f231a4b8 ist eigentlich die Summe folgender Summanden:
math_992.5_16248d0326f7c946d02d1e0365999079

Mathematisch kann man dies wie folgt darstellen:

math_986.5_ff8698b18595ded77a7f12c7a32c3d22
oder
math_971_e51f70a143516b47f49a91deb38a5f42
Definition:
math_994_aab1f016985f49f4f38239b6ca425f66

math_983_881ba45f62a37cee7193169b3be411f1
Daraus folgt (geometrische Reihe): math_980_c595caa0af46846044fd1eb9fa4e3d41

Falls es jemand nicht direkt versteht: Was sind   1/3 dezimal geschrieben?
Richtig, 0,(3) bzw. 0,3333333333333…
Jetzt multiplizieren wir diesen Wert mit (1/3) * 3 = 3/3 = 1
Aber  0,333333… * 3 = 0,999999… = 0,(9)
Dies ist zwar jetzt nicht der Beweis, aber zeigt der Person anschaulich die Problematik.

Überrascht? Das war ich auch.
Aber dies erklärte meine Frage zur Integralrechnung, wieso der Flächeninhalt – math_975.5_0d4b644471f5b3248872fc21e3e6fc59  – von t∈[1,2) <Grenzwerte: einschl. 1 bis ausschließlich 2> gleich dem Flächeninhalt von t∈[1,2] <Grenzwerte: einschl. 1 bis einschließlich 2> ist.

[Erfahrungsbericht] Metawatch Frame im Test mit dem Google Nexus 5

Da der Trend mit den Wearables ja gerade richtig anfängt, habe ich mir gedacht, ich schaue mich einmal nach einer sogenannten SmartWatch um.
Viele Namen fielen dort auf: G Watch, Moto 360, Pebble. Alle im Preisrahmen von 200€. Zuviel für einen Einstieg in die Materie und für Geräte, die ich vielleicht gar nicht richtig nutzen kann oder will.
Nach ein bisschen Recherche fand ich dann die MetaWatch, welche es in zwei Auführungen gibt: Strata und Frame.
Ich entschied mich für die edlere Frame aus Aluminium mit schwarzem Lederarband für ca. 85€.
In den letzten Tagen testete ich die Uhr.

Unboxing:

Also bestellt und ausgepackt. Die Uhr ist schlicht in der Hülle gehalten. Als Zusatz gibt es einen Ladeclip (darauf komme ich später zurück) und ein microUSB-Kabel.
20140913_113949_Android20140913_114255_Android

Daraufhin also das Kabel in den Ladeclip und an ein USB-Ladegerät hängen (nicht im Lieferumfang) und die Uhr voll laden lassen (brauch ca. 2-3 Stunden).
Da fällt schon der erste Makel auf. Der Clip bzw. der Anschluss an der Uhr sind etwas fummelig und es braucht einen Augenblick, bis die Uhr dann lädt.

Inbetriebnahme:

Währenddessen erstmal die App im PlayStore heruntergeladen.
Es gibt auch eine Community-Version der Software. Allerdings lief diese bei mir alles andere als zufriedenstellend, die Wetter Funktion ist nicht funktional, einige Screens laden sehr langsam, die Notifications erscheinen teilweise nicht und es erscheint ein Störbild.
Die Uhr blieb einige Male sogar hängen und musste hart zurückgesetzt werden. So habe ich die Community Version deinstalliert und die Uhr zurückgesetzt. (Mitte links und Mitte rechts gedrückt halten und dann an das Ladegerät hängen). Sollte man die Uhr nicht zurücksetzen, so ist das Layout komplett gestört und die Uhr funktioniert nicht.

Danach habe ich die Uhr mit der originalen Software genutzt und diese mit dem Handy verbunden.
Anschließend kann man die vier Bildschirme frei mit den zur Verfügung gestellten Widgets bestücken:

  • Uhr
  • Wetter
  • Kalender
  • Facebook
  • Aktien
  • Unread GMail
  • Batteriestatus
  • Gelaufen Schritte
  • Twitter

Screenshot_2014-09-13-11-43-51Screenshot_2014-09-15-18-09-38Screenshot_2014-09-13-11-44-51   Screenshot_2014-09-13-11-44-30Screenshot_2014-09-13-11-44-07Screenshot_2014-09-13-11-44-18

Die Widgets können in verschiedenen Größen (siehe Bild 1 und 2) hinzugefügt werden, allerdings stehen nicht alle in allen Größen zur Verfügung.
Nach der Konfiguration der Widgets kann man diese noch genauer einstellen, bspw. der Ort des WetterWidgets und die Updatehäufigkeit (siehe Bild 3)
In der Einstellungen kann man noch einstellen, über welche Dinge man informiert werden möchte und seinen Facebook bzw. Twitter Account verbinden (wird für das Widget benötigt), etc. (siehe Bilder 4 und 5).
Im MetaFilter-Menü kann man noch einstellen, von welchen Apps man Notifications erhalten möchte.

Nutzung:

Die Uhr macht am Arm eine ganz gute Figur im Vergleich zu anderen SmartWatches auf dem Markt. Dies hat sie vor allem ihrem Alu-Look und den gebürsteten Knöpfen zu verdanken.
Aber der Look ist eben Geschmackssache.
Grundsätzlich habe ich den ersten Bildschirm die Uhr als Vollscreen-Widget gebunden. So erfüllt die Uhr auch ihren wirklichen Zweck. (1)
Da Display ist glänzend und spiegelnd, was wohl an dem pixel reflective mirror LCD liegt.
Anfänglich dachte ich, dass das Display eine der Schwachenstellen des Gerätes ist. Das Display spiegelt nämlich stark, wenn man es im Licht hin- und herschwenkt.
Am Arm ist dies aber kein wirkliches Problem. Im Dunkeln kann man die Uhr lesen, indem man die LED aktiviert (Button Rechts oben).

20140913_113949_Android20140913_113821_Android20140913_113721_Android20140913_114004_Android20140915_184151_AndroidIMG_20140915_190205

Nun zu den smarten Gimmicks des Gerätes. Über den Knopf (Mitte links) lässt sich das Musik-Menü aufrufen. Hier wird das gerade gespielte Lied angezeigt. Man kann die Lautstärke ändern und zum nächsten Lied springen, aber auch das Lied pausieren und weiter spielen lassen. (2)

Über den Knopf unten links lässt sich das Infomenü auswählen, hier lässt sich der Status der Uhr abrufen, also Akkustand, Bluetooth, Verbindung zum Handy und Hardware, sowie Firmwareversion ablesen. (3)

Sollte eine Notification eingehen, so vibriert die Uhr und zeigt diese auf dem Display an (4). Nach diesem Muster werden alle Notifications für Apps angezeigt, welche man im MetaFilter gesetzt hat.
Die Facebook-Option, welche man noch setzen kann (siehe Punkt „Inbetriebnahme“) zeigt dann zusätzlich noch Benachrichtigungen an (5).

Im letzten Bild sieht man das Kalender-Widget im Vollscreen-Modus.

Die Akkulaufzeit beträgt geschätzt vier bis fünf Tage, danach muss die Uhr wieder an die Ladestation.

Fazit

Für diesen Preis erfüllt die Uhr genau das, was sie soll. Allerdings ist die App in den Widgets beschränkt und es gibt keine explizite Funktion, um bspw. WhatsApp-Nachrichten anzeigen zu lassen. Auch ist das Display, obwohl es mich nicht wirklich stört, nicht die beste Wahl für eine Uhr, welche in allen Bedingungen gut ablesbar sein soll.
Auch ist die Uhr nicht sonderlich verbreitet. Die Community-Edition wurde zuletzt 2012 aktualisiert. Auch das Forum von MetaWatch ist nicht gerade stark frequentiert.
Die App für Android wurde zuletzt im Juni 2014 aktualisiert, allerdings nur für „minor bug fixes“. Erhofft man sich also in der Zukunft mehr Funktionen, so rate ich zu einer anderen Uhr.
Ansonsten ist die Uhr für diesen Preis gut. Über das Display und den fummeligen Ladeanschluss kann man hinwegsehen.
Und wer sich mit diesen Funktionen zufrieden gibt, wird sich mit dieser Uhr anfreunden können.