kramann.info
© Guido Kramann

Login: Passwort:










EmbSyst
1 day_by_day
2 Eingebettete_Systeme
..2.1 Softwareentwicklung
....2.1.1 AgileSoftwareentwicklung
....2.1.2 Verhalten
....2.1.3 Entwurfsmuster
....2.1.4 FuzzyRegler
....2.1.5 Uebung
..2.2 Arduino
....2.2.1 Uebung1
..2.3 Android
....2.3.1 UML
......2.3.1.1 Volumenberechnung
......2.3.1.2 UML_Klassendiagramm
......2.3.1.3 Konstruktor
......2.3.1.4 Statische_Variable
....2.3.2 bluej
....2.3.3 Threads
....2.3.4 Interfacedesign
....2.3.5 Android
......2.3.5.1 Getting_Started
......2.3.5.2 App
......2.3.5.3 Beispielprojekt
........2.3.5.3.1 Richtlinien
........2.3.5.3.2 Anforderungen
........2.3.5.3.3 Layout
........2.3.5.3.4 Projekt_einrichten
........2.3.5.3.5 Refactoring
........2.3.5.3.6 Icon
........2.3.5.3.7 Icon2
........2.3.5.3.8 Kurzanleitung
........2.3.5.3.9 Architektur
........2.3.5.3.10 Anwendungsklasse
......2.3.5.4 Threads
......2.3.5.5 Activities
......2.3.5.6 Was_ist_wo
......2.3.5.7 Regelungssysteme
........2.3.5.7.1 Servo
........2.3.5.7.2 Fahrzeug
......2.3.5.8 ADB_Apps
......2.3.5.9 Veroeffentlichen
......2.3.5.10 Einzelheiten
........2.3.5.10.1 Bildschirmaufloesung
........2.3.5.10.2 Parameter
........2.3.5.10.3 Permission
........2.3.5.10.4 Latenzzeit
......2.3.5.11 Tonerkennung
........2.3.5.11.1 Wahrscheinlichkeitsrechnung
........2.3.5.11.2 Kovarianz_Scilab
........2.3.5.11.3 Java_Threads
........2.3.5.11.4 Java_Reflection
....2.3.6 Processing
......2.3.6.1 Installation
......2.3.6.2 Erste_Schritte
......2.3.6.3 Mechatronik
......2.3.6.4 Bibliotheken
......2.3.6.5 Uebung
......2.3.6.6 Snippets
........2.3.6.6.1 Dateioperationen
........2.3.6.6.2 Bilder
........2.3.6.6.3 GUI
........2.3.6.6.4 Text
........2.3.6.6.5 PDF
........2.3.6.6.8 Maus
........2.3.6.6.10 Zeit
........2.3.6.6.13 Animation
........2.3.6.6.15 Simulation
......2.3.6.7 Referenzen
....2.3.7 Android_Processing
......2.3.7.1 Basics
......2.3.7.2 Einrichten
......2.3.7.3 Crossplattform
......2.3.7.4 sinus
......2.3.7.5 sample
......2.3.7.6 analyse
......2.3.7.7 synthese
......2.3.7.8 Hilfsapps
......2.3.7.9 Eigene_Library
....2.3.8 Processing_VR
....2.3.9 Shapes3D
....2.3.10 TextToSpeech
....2.3.11 Internetprogrammierung
......2.3.11.1 Codegenerierung
......2.3.11.2 PHP_Programmierung
......2.3.11.3 PHP_OOP
......2.3.11.4 Java
......2.3.11.5 UDP
......2.3.11.6 Internetkontrolle
........2.3.11.6.1 Kamerabild
....2.3.12 OSC
......2.3.12.1 Datenaustausch
......2.3.12.2 i2audiolab
......2.3.12.3 Ardour
....2.3.13 Netzwerkprogrammierung
....2.3.14 JNI
....2.3.15 Erweitern
......2.3.15.1 sprich
......2.3.15.2 spiel
....2.3.16 thbvr
....2.3.17 Reflection
....2.3.18 Script
....2.3.19 Java3D
3 Echtzeitprogrammierung
..3.1 Echtzeit
..3.2 Korrektheit
..3.2 Semaphoren
..3.3 Hardware
..3.5 Synchronprogramm
..3.6 Zustandsmaschine
..3.7 Arduino
....3.7.1 Uebung
....3.7.2 RTOS
....3.7.3 Scheduler
....3.7.4 Semaphor
......3.7.4.1 Laufkatze
......3.7.4.2 Java
......3.7.4.3 Semaphor
....3.7.5 Messages
..3.8 Android
....3.8.2 Threads
......3.8.2.1 Java
......3.8.2.2 Synchronisierung
..3.9 Petrinetze
....3.9.1 Installation
....3.9.2 Test
4 KI
..4.1 Unueberwachtes_Lernen
..4.2 Agentensysteme
....4.2.1 Architekturen
......4.2.1.1 Verhalten
......4.2.1.2 Entwurfsmuster
....4.2.2 SUMO
......4.2.2.1 GettingStarted
......4.2.2.2 Antrieb
......4.2.2.3 Sensoren
......4.2.2.4 Zeitbasis
......4.2.2.5 Fernsteuerung
......4.2.2.6 Umsetzung_Fernst
......4.2.2.7 Fernsteuerung3
......4.2.2.10 Umsetzung
......4.2.2.11 Sockelsoftware
......4.2.2.12 Plan
......4.2.2.13 Lernen
........4.2.2.13.1 Parameter
........4.2.2.13.2 Identifikation
........4.2.2.13.3 Java
..4.3 Genetische_Algorithmen
....4.3.1 Heuristiken
....4.3.2 Genalgorithmus
..4.4 Kalmanfilter
....4.4.1 Vorarbeit
....4.4.2 Minimalversion
....4.4.3 Beispiel
5 Bildverarbeitung
..5.1 Gestalttheorie
..5.2 Bildverarbeitung
6 Technische_Systeme
..6.1 Kulturgeschichte
..6.2 Technikphilosophie
..6.3 Anthropozaen
7 Literatur
kramann.info
© Guido Kramann

Login: Passwort:




Entwurf einer Software-Architektur für die App-Entwicklung am Beispiel von TapeEcho

(EN google-translate)

(PL google-translate)

Nach folgende Grafik zeigt den Entwurf einer Klassenarchitektur für TapeEcho:

Klassenarchitektur für TapeEcho.

Bild 0-1: Klassenarchitektur für TapeEcho.

Es gilt ein umfangreiches Framework zu entwickeln, um allgemein die Entwicklung eines bestimmten individualisierten Typs an Apps zu unterstützen. So ist die Klasse Zwischenschicht dafür vorgesehen, den unmittelbar in der erbenden Klasse verfügbaren Befehlssatz anzureichern, so dass die Methoden aus PApplet und auch die der Zwischenklasse verfügbar sind.

Beispiele hierzu wären Methoden, die es vereinfachen, Standardbedienelemente zu erzeugen, oder die Eigenschaften des Zieldevices abzurufen (verfügbarer RAM-Speicher, Sensoren, ... ), oder Hilfsmethoden, um GUI-Elemente wie Buttons leichter zu erstellen.

Neben der Hauptklasse (im wirklichen Projekt info.kramann.tapeecho.TapeEcho), gibt es die Anwendungsklasse, die die Hauptfunktionalität enthält und bereits mit Hilfe einer rudimentären GUI in Hauptklasse getestet werden kann.

In einem Unterpackage hilfsklassen werden zudem nützliche Methoden gesammelt, die auch in anderen Projekten wiederverwendet werden können.

Nachfolgend sind zur Illustration noch Beispiel-Attribute und -Methoden eingefügt:

Klassenarchitektur für TapeEcho mit Beispielmethoden.

Bild 0-2: Klassenarchitektur für TapeEcho mit Beispielmethoden.

Dier hier dargestellte Struktur soll als Anregung für das eigene Projekt dienen, kann aber auch einfach so, wie sie ist für das eigene Projekt adaptiert werden.

Verfeinerung der Architektur

Anstatt einer Zwischenschicht, werden eine ganze Reihe voneinander erbender Zwischenklassen eingeführt.

Das hat den Vorteil, dass der Quelltext besser geordnet wird und man nicht benötigte Zwischenschichten leichter entfernen kann, insofern erst die Hauptklasse die Inhalte benötigt und nicht bereits Zwischenklassen.

Verfeinerung der Architektur

Bild 0-3: Verfeinerung der Architektur

Das vorangestellte X steht für eXtension / Erweiterung.

Zudem wäre denkbar, die Zwischenklassen in einzelne als Library markierte, voneinander getrennte Eclipse-Projekte zu packen.

Die Anzahl der Zwischenklassen könnte viel größer sein. Hier ein Entwurf:

  • PApplet - tiefste Schicht
  • Xdevice - Informationen über das Gerät sind von hier abrufbar.
  • Xconst - Globale Konstanten können hier vereinbart werden.
  • Xtime - Datum, Uhrzeit, vergangene Zeit seit start, ...
  • Xfile - Persistenz (Daten laden/speichern)
  • Xtext - Umgang mit Text (Darstellung, laden, speichern)
  • Ximage - Umgang mit Bildern (laden, speichern, darstellen)
  • Xaudio - Mikrofon, Audioausgang
  • Xgui - GErzeugen von GUI-Elemente
  • Xsensor - Zugriff auf Device-Sensoren
  • Xcam - Kamera
  • Xnfc - Near Field Communication
  • Xtooth - Bluetooth
  • Xnet - Internetzugriff
  • Xanimation - Erstellen von Animationen
  • X3d - 3D-Objekte
  • Xdatabase - Verwendung einer Datenbank
  • Xxml - Manipulation von XML
  • Xhtml - Manipulation von HTML-Dokumenten
  • Xuart - serielle Kommunikation

Da es sich um eine grosse Anzahl an Möglichkeiten handelt und die strenge Hierarchie eher unmotiviert ist, wäre alternativ möglich von jeder Klasse ein Objekt in der Hauptklasse bei Bedarf zu erzeugen.

Der Nachteil hiervon ist, dass nun nicht mehr ein einfacher Befehl etwas bewirkt, sondern immer objektname.befehl().

Tip: Notwendige Resourcen wie Arrays, andere Objekte müssen nicht vor der ersten Verwendung einer Methode instanziiert werden, wenn man so verfährt:
public boolean sendeSMS(String text, String nummer)
{
    if(sms==null)
    {
        sms = new SMSgeraet();
    }

    if(sms!=null)
    {
        sms.schicken(text,nummer);
        return true;
    }
    else
    {
        return false;
    }
}

Code 0-1: Instanziierung bei Bedarf am Beispiel eines SMS-Gerätes.

Vorteil: leichter verstehbarer Code im Hauptprogramm. Vorteil2: Keine unnötigen Instanziierungen. Nachteil: Verlangsamung beim ersten Aufruf der Methode.