Taentzer Software-Praktikum 2013 43
Überblick
Modellierung der wesentlichen Aspekte Welche Anwendungsfälle haben wir?
Übersicht durch Anwendungsfalldiagramme Wie ist die Benutzerführung?
Verfeinerung der Anwendungsfälle durch Aktivitätendiagramme
Mit welchen Datenstrukturen arbeiten wir? Datenmodellierung mit Klassendiagrammen
Taentzer Software-Praktikum 2013 44
Überblick über AnwendungsfälleKonzepte: Akteure: Benutzer, Kunde,… Anwendungsfall Akteur führt Anwendungsfall aus. Anwendungsfall ist einem anderen enthalten (include). Anwendungsfall erweitert einen anderen (extend).
Erweiterungspunkt definieren
Beispiel „ClickCounter“
Taentzer Software-Praktikum 2013 45
Aktivitätendiagramme im Praktikum
Ein Anwendungsfall wird durch ein Aktivitäten-diagramm verfeinert. Es beschreibt den Ablauf des Anwendungsfalls.
Es gibt zwei Arten von Aktivitäten: externe: Anzeige einer graphischen Komponente. interne: Durchführung einer internen Aktion, z.B.
Datenspeicherung Endaktivitäten werden mit Anwendungsfällen
verknüpft. Zur Beschreibung des Kontrollflusses zwischen mehreren
Anwendungsfällen.
Klassendiagramme im Praktikum
zur Modellierung der Objektstrukturen in der objektorientierten Schicht
Beispiel:
Taentzer Software-Praktikum 2013 50
Taentzer Software-Praktikum 2013 52
Überblick Entwicklung der Benutzeroberfläche
Views Layouts Events Menüs Adapter
Entwicklung einer Zwei-Schichten-Architektur Entwicklungsrichtlinien
Best Practices: generelle und spezielle Richtlinien für mobile Geräte
Taentzer Software-Praktikum 2013 53
Views
Views: graphische Komponenten in einer Activity, z.B. Listen, Textfelder, Knöpfe und auch ein einbettbarer Web-Browser
Definition der View-Hierarchie in der Layout-Datei der Activity
aus „android.com“
View-Hierarchie:
Zeichnen einer View
Zeichnen einer View durch Aufruf von setContentView() der enthaltenden Activity Parameter: Wurzel der View-Hierarchie
Taentzer Software-Praktikum 2013 54
CreateCounter.java:
Verweis auf XML-Datei
Taentzer Software-Praktikum 2013 55
Layout graphischer Komponentencreate_counter.xml
Layout-Definition durch eine XML-Layout Datei.
Jedes XML-Element ist entweder ein View oder ein ViewGroup-Objekt.
Layouts für ViewGroup-Objekte: LinearLayout RelativeLayout AbsoluteLayout TableLayout GridLayout etc.
Widget: View-Objekt für Benutzerinteraktion Z.B. Button, Checkbox,
Texteingabefeld, Uhr Interaktion über Events
Layout-Gruppen
Gruppieren mehrere Views zu einer ViewGroup. FrameLayout definiert einen leeren Rahmen, der
später durch ein Objekt gefüllt werden kann. LinearLayout bringt alle Kinder in eine Reihe. TableLayout positioniert seine Kinder in Zeilen und
Spalten. Die Tabelle wird durch eine Liste von TableRows aufgebaut. Einzelne Zellen können frei bleiben, aber nicht kombiniert werden.
RelativeLayout überlässt seinen Kinder das Layout. Sie positionieren sich relativ zueinander (links, rechts, über, unter).
Taentzer Software-Praktikum 2013 56
Taentzer Software-Praktikum 2013 57
Der Event-Mechanismus
Prinzipielle Idee: Views interagieren über Events miteinander und mit dem Benutzer.
Wenn ein View auf einen Typ von Events hören möchte, meldet er sich als Listener an.
Wenn das Event eintrifft, werden alle Listener benach-richtigt und jeweils eine Callback-Methode ausgeführt.
Views können bereits auf viele Typen von Events hören: z.B. View.onClickListener() View.ontouchListener() View.onKeyListener() Anmeldung des akt. View:
z.B. setOnClickListener() Überschreiben einer
Callback-Methode bei eigenen Views möglich, z.B.: onClick() onKeyDown()
Taentzer 59
Definition eines Menüs Drei Arten von Menüs:
OptionsMenu – durch Drücken von MENU
ContextMenu – ein Kontextmenü
PopupMenu – zum Anzeigen von Daten
Zur Definition von Menüs werden Callback-Methoden überschrieben: onCreateOptionsMenu() onOptionsItemSelected()
Menüeinträge können in einer Layout-Datei definiert werden.
Weitere View-Komponenten werden im Emulator unter ApiDemos erklärt.
Menü mit Icons
Software-Praktikum 2013
Weitere Menü-KonzepteCallback-Methoden:
onCreateOptionsMenu() – wird beim Erzeugen einer Activity aufgebaut
onPrepareOptionsMenu() – wird nach dem Drücken des Menu-Knopfs aufgerufen
onOptionsItemSelected() – wird bei Auswahl eines Menüeintrags aufgerufen und behandelt die möglichen Menüaktionen
onCreateContextMenu() - wird zum Erzeugen eines Kontextmenüs aufgerufen (anders als bei onCreatOptionsMenu)
onContextItemSelected() () – wird bei Auswahl eines Menüeintrags aufgerufen und behandelt die möglichen Menüaktionen
Taentzer Software-Praktikum 2013 60
Taentzer Software-Praktikum 2013 61
ListView als spezieller AdapterView
Ein ListView ist eine ViewGroupzur Darstellung von Aufzählungen
Die ListView ist ein AdapterViewund braucht einen Adapter, um die Daten darzustellen.
Ein AdapterView ist an eine externe Datenquelle gebunden. Zwischen der ListView und der
Datenquelle fließt ein Adapter-Objekt.
Mit einem spezialisierten Array Adapter kann die Darstellung der Listeneinträge angepasst werden.
Beispiel: Ein ListView mit angepasstem Array-Adapter
Taentzer Software-Praktikum 2013 62
Darzustellender Inhalt: Liste mit
ClickCounts
Darstellung eines Eintrags: Darstellung eines ClickCounts
Context: umgebene Activity: ClickConfig
ClickConfig.java:
Erstellung des ListView:
Beispiel: Benutzerauswahl behandeln
Taentzer Software-Praktikum 2013 63
ClickConfig.onCreate():
Ausgewählter Eintrag
Callback-Methode, die nach einem Klick ausgeführt wird
view – der View, der geklickt wurdei - die Position des geklickten Eintragsl – die Id des geklickten Eintrags
Taentzer Software-Praktikum 2013 64
Entwicklungsrichtlinien für effizienten Code
Performanz: Schreib keinen unnötigen
Programmcode! kein Code für alle
Eventualitäten Best Practices:
generelle Empfehlungen spezielle Empfehlungen für
mobile Anwendungen
Generelle Best Practices: Benutze Klassen und
Methoden, die schon im SDK vorhanden sind!
Deklariere Methoden, die keine Objektinformation brauchen, als statisch!
Deklariere Felder und Methoden als final, wenn sie nicht überschrieben werden!
Taentzer Software-Praktikum 2013 65
Beispiele: Best Practices
Konstanten werden nicht überschrieben und sind von Objekten unabhängig:// Menu item ids
public static final int MENU_ITEM_DELETE = Menu.FIRST;public static final int MENU_ITEM_INSERT = Menu.FIRST + 1;
Methode zur Berechnung des Durchschnitts ist von Objekten unabhängig.public static double mean(int[] p) {
int sum = 0; // sum of all the elements for (int i=0; i<p.length; i++) {
sum += p[i]; } return ((double)sum) / p.length;
}
Aufruf:double averageAttendance =
MyUtils.mean(attendance);
Taentzer Software-Praktikum 2013 66
Entwicklungsrichtlinien für effizienten Code (2)
Spezielle Best Practices für mobile Anwendungen: Erzeuge nicht mehr Objekte als
nötig! Verlier keine Daten!
onSaveInstanceState() onPause()
Überlade einzelne Seiten nicht! Entwirf die Benutzeroberfläche
so, dass die Anwendung auf verschiedenartigen Geräten laufen kann.
Nutze Netz und Strom wenig!
Generelle Best Practices: Vermeide doppelten Code!
keine Copy-and-Paste-Programmierung
Vermeide Spaghetti-Code! Vermeide temporäre Felder!
keine Zwischenergebnisse in Objektfeldern
Vermeide Klassen, die ihr Erbe verweigern! Alle geerbten Felder und
Methoden sollen auch in den Unterklassen sinnvoll sein.
Taentzer Software-Praktikum 2013 67
Zusammenfassung Activities enthalten Views.
Layout in XML-Datei möglichst relatives Layout Views hören auf Events vom Benutzer (Listener-Konzept)
AdapterViews: Sind an Datenquellen angeschlossen Können Daten durch spezielle Adapter speziell darstellen.
Zwei-Schichten-Architektur: Datenhaltung und Oberfläche: Die obere Schicht benutzt die
untere. Die untere Schicht schickt Notifications an die obere. Entwicklungsrichtlinien
generelle für guten Programmierstil spezielle für mobile Geräte, um Zeit und Platz zu sparen