Modellierung einer Android-App 2. Mai 2013 Taentzer Software-Praktikum 2013 42 Ü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 43 Überblick über Anwendungsfälle Konzepte: 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 44 Aktivitätendiagramme im Praktikum Ein Anwendungsfall wird durch ein Aktivitätendiagramm 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. Taentzer Software-Praktikum 2013 45 Aktivitätendiagramm „Zählerliste zeigen“ Taentzer Software-Praktikum 2013 46 Aktivitätendiagramm „Zähler anlegen“ Taentzer Software-Praktikum 2013 47 Aktivitätendiagramm „Klicken“ Taentzer Software-Praktikum 2013 48 Aktivitätendiagramm „Gruppe anlegen“ Taentzer Software-Praktikum 2013 49 Klassendiagramme im Praktikum zur Modellierung der Objektstrukturen in der objektorientierten Schicht Beispiel: Taentzer Software-Praktikum 2013 50 Android-Vertiefung 2. Mai 2013 Taentzer Software-Praktikum 2013 51 Ü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 52 Views Views: graphische Komponenten in einer Activity, z.B. Listen, Textfelder, Knöpfe und auch ein einbettbarer WebBrowser Definition der ViewHierarchie in der LayoutDatei der Activity View-Hierarchie: aus „android.com“ Taentzer Software-Praktikum 2013 53 Zeichnen einer View Zeichnen einer View durch Aufruf von setContentView() der enthaltenden Activity Parameter: Wurzel der View-Hierarchie CreateCounter.java: Taentzer Software-Praktikum 2013 Verweis auf XML-Datei 54 Layout graphischer Komponenten create_counter.xml Layout-Definition durch eine XML-Layout Datei. Jedes XML-Element ist entweder ein View oder ein ViewGroup-Objekt. Layouts für ViewGroupObjekte: LinearLayout RelativeLayout AbsoluteLayout TableLayout GridLayout etc. Widget: View-Objekt für Benutzerinteraktion Z.B. Button, Checkbox, Texteingabefeld, Uhr Interaktion über Events Taentzer Software-Praktikum 2013 55 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 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 benachrichtigt und jeweils eine Callback-Methode ausgeführt. Taentzer 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() Software-Praktikum 2013 57 Beispiel: Events in CreateCounter CreateCounter.java: Taentzer Software-Praktikum 2013 58 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. Taentzer Software-Praktikum 2013 Weitere ViewKomponenten werden im Emulator unter ApiDemos erklärt. Menü mit Icons 59 Weitere Menü-Konzepte Callback-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 ListView als spezieller AdapterView Ein ListView ist eine ViewGroup zur Darstellung von Aufzählungen Die ListView ist ein AdapterView und braucht einen Adapter, um die Daten darzustellen. Ein AdapterView ist an eine externe Datenquelle gebunden. Zwischen der ListView und der Datenquelle fließt ein AdapterObjekt. Mit einem spezialisierten Array Adapter kann die Darstellung der Listeneinträge angepasst werden. Taentzer Software-Praktikum 2013 61 Beispiel: Ein ListView mit angepasstem Array-Adapter ClickConfig.java: Darstellung eines Eintrags: Darstellung eines ClickCounts Darzustellender Inhalt: Liste mit ClickCounts Context: umgebene Activity: ClickConfig Erstellung des ListView: Taentzer Software-Praktikum 2013 62 Beispiel: Benutzerauswahl behandeln Callback-Methode, die nach einem Klick ausgeführt wird ClickConfig.onCreate(): view – der View, der geklickt wurde i - die Position des geklickten Eintrags l – die Id des geklickten Eintrags Taentzer Ausgewählter Eintrag Software-Praktikum 2013 63 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 Taentzer 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! Software-Praktikum 2013 64 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; Aufruf: // sum of all the elements double averageAttendance = for (int i=0; i<p.length; i++) { MyUtils.mean(attendance); sum += p[i]; } return ((double)sum) / p.length; } Taentzer Software-Praktikum 2013 65 Entwicklungsrichtlinien für effizienten Code (2) Generelle Best Practices: Vermeide doppelten Code! keine Copy-and-PasteProgrammierung 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 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! Software-Praktikum 2013 66 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 Taentzer Software-Praktikum 2013 67