1. Trang chủ
  2. » Công Nghệ Thông Tin

Flash 8 ActionScript ppt

553 921 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Flash 8 ActionScript ppt
Tác giả Arno Kohl
Trường học Macromedia Akademie for Medien
Chuyên ngành ActionScript
Thể loại giáo trình
Năm xuất bản 2011
Thành phố München
Định dạng
Số trang 553
Dung lượng 19,63 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

An dieser Stelle bemerkt der Autor zugegebe-nermaßen mit einer gewissen inneren Freude, dass man Skripte aus einem Buch nicht durch schlichtes Kopieren in Flash einfügen kann, sprich: Da

Trang 3

ActionScript 2

Ein Lehr- und Übungsbuch

1 3

Trang 4

ISBN 978-3-540-35179-5 e-ISBN 978-3-540-35182-5

DOI 10.1007/978-3-540-35182-5

Springer Heidelberg Dordrecht London New York

Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen grafie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.

Nationalbiblio-© Springer-Verlag Berlin Heidelberg 2011

Dieses Werk ist urheberrechtlich geschützt Die dadurch begründeten Rechte, insbesondere die der Übersetzung, des Nachdrucks, des Vortrags, der Entnahme von Abbildungen und Tabellen, der Funksendung, der Mikroverfilmung oder der Vervielfältigung auf anderen Wegen und der Spei- cherung in Datenverarbeitungsanlagen, bleiben, auch bei nur auszugsweiser Verwertung, vorbe- halten Eine Vervielfältigung dieses Werkes oder von Teilen dieses Werkes ist auch im Einzelfall nur in den Grenzen der gesetzlichen Bestimmungen des Urheberrechtsgesetzes der Bundesrepublik Deutschland vom 9 September 1965 in der jeweils geltenden Fassung zulässig Sie ist grund- sätzlich vergütungspflichtig Zuwiderhandlungen unterliegen den Strafbestimmungen des Urhe- berrechtsgesetzes.

Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.

Einbandgestaltung: KünkelLopka GmbH, Heidelberg

Gedruckt auf säurefreiem Papier

Springer ist ein Teil der Fachverlagsgruppe Springer Science+Business Media (www.springer.com)

Trang 5

In erster Linie gebührt all meinen Studenten und Schülern Dank dafür, dass sie klaglos meinen gelegentlich sicher etwas anstrengenden Unterricht über sich er-gehen ließen und mir so Gelegenheit gaben, den einen oder anderen Workshop am lebenden Sujet auszutesten

Besonderen Dank schuldet der Autor jenen, die aktiv mit Rat und Tat zur Seite standen Namentlich seien genannt:

– „eyelan“ Benedikt Hocke, der mit seiner raschen Auffassungsgabe, lichem grafischen Geschick und großer Phantasie eine frühe Phase des Buches begleitete;

unvergleich-– Frau Nina Eichinger, die insbesondere ein passendes Layout entwickelte;

– Herr Richard Häusler, der angenehm kritisch größere Teile des Manuskripts tierte und manch einem hartnäckigen Fehler auf die Schliche kam

gou-Ein ganz großes Danke Schön an das Lektorat des Springer Verlags, das mit einer Engelsgeduld jede Terminübertretung des Autors ertragen hat und so das Fertigstel-len des Manuskriptes überhaupt erst ermöglichte

Und schließlich sei auch denjenigen gedankt, die die Entwicklung des Skripts langfristig mit kritischem Blick und manch aufmunterndem Kommentar begleiteten (2006: „Wieweit bist Du denn schon?“, 2007: „Ist denn wenigstens ein Kapitel fer-tig?“, 2008: „Hast Du schon angefangen?“, 2009: „Naja, wenn der Maya-Kalender mit 2012 Recht hat, musst Du Dich jetzt auch nicht mehr beeilen“)

Danksagung

Trang 6

Einleitung

1 1

ActionScript: Geschichte, Versionen, Ausblick 2 5

Programmentwicklung und Programmiersprachen 3 11

3.1 Ansätze (Top-Down, Bottom-Up) 11

3.2 Algorithmus als Problemlösung 12

3.3 Hilfsmittel zur Entwicklung von Algorithmen 13

3.3.1 Flowcharts 14

3.3.2 Pseudo-Code 15

3.4 Beispiel-Algorithmus „Kaffee kochen“ 16

Programmierung und ActionScript 4 27

Framework und Codeorganisation 5 35

5.1 Skriptarten (Objekt- und Bildskript) 35

5.2 Anzahl der Bildskripte 37

5.3 Aufbau eines Skripts 37

Operatoren 6 41

6.1 Zuweisungsoperator 42

6.2 Arithmetische Operatoren 42

6.3 Inkrement-/Dekrementoperator 43

6.4 Stringoperatoren 44

6.5 Vergleichsoperatoren 46

6.6 Logische Operatoren 48

6.7 Bit-Operatoren 50

6.8 Sonstige 51

Variablen 7 55

7.1 Deklaration 55

7.2 Wertezuweisung 58

7.3 Reichweite 60

7.4 Parameter und Zählvariablen 62

7.5 Konstanten 62

Datentypen 8 63

8.1 Boolean 64

8.2 Number 64

Inhaltsverzeichnis

Trang 7

8.3 String 67

8.4 Null, undefined 67

8.5 MovieClip 68

8.6 Object 68

8.7 Void 68

Arrays 9 69

9.1 Arrays einrichten und die Länge definieren 69

9.2 Arrays bei der Deklaration füllen 70

9.3 Zugriff auf Inhalte 70

9.4 Arrays dynamisch füllen 72

9.5 Löschen von Elementen 74

9.6 Arrays sortieren und durchsuchen 77

9.7 Weitere Methoden 80

9.8 Mehrdimensionale Arrays 81

9.9 Assoziative Arrays 82

Funktionen 10 85

10.1 Funktionsdeklaration und -aufruf 85

10.2 Funktionen ohne Bezeichner 86

10.3 Gültigkeit 87

10.4 Verschachtelung von Funktionen 88

10.5 Parameter 89

10.6 Funktionen mit Rückgabewert (return) 91

10.7 Von Flash zur Verfügung gestellte Funktionen 92

10.8 Rekursion 93

Kontrollstrukturen 11 95

11.1 Bedingungen 95

11.1.1 Die if-Anweisung 95

11.1.2 Verschachtelte if-Anweisungen, logisches und, logisches oder 98

11.1.3 if else 99

11.1.4 else if 100

11.1.5 switch, break 101

11.2 Schleifen 103

11.2.1 for-Schleife 104

11.2.2 break, continue 108

11.2.3 while-Schleife 108

11.2.4 do while-Schleife 109

11.2.5 for in-Schleife 110

11.2.6 Endlosschleifen 111

MovieClip-Klasse 12 113

12.1 Eigenschaften von MovieClips 113

12.1.1 Adressierung von MovieClips 113

12.1.2 _x, _y, _xmouse, _ymouse, _width, _height 119

12.1.3 _xscale, _yscale 123

12.1.4 _rotation, _alpha, _visible 125

12.1.5 blendMode 128

12.1.6 _currentframe, _totalframes 130

12.2 Ereignisse 130

Trang 8

ix Inhaltsverzeichnis

12.2.1 onEnterFrame 131

12.2.2 Schaltflächenereignisse von MovieClips 132

12.2.3 Maus-Ereignisse 135

12.3 MovieClip-Methoden 136

12.3.1 Zeitleistensteuerung 136

12.3.2 Objekte dynamisch einfügen 138

12.3.3 Drag and Drop 147

12.3.4 Kollision 148

12.3.5 Maskierung 150

12.3.6 Ausdehnung und Koordinaten 151

12.4 Die Mutter aller MovieClips: _root (_level0) 153

Zeichnungsmethoden der MovieClip-Klasse 13 155

13.1 Linien, Kurven und Füllungen 156

13.2 Verlaufsfüllungen 160

13.3 Ereignisse, Methoden, Eigenschaften 165

13.4 Geometrische Grundfiguren (Kreis, Oval, Polygon, Stern) 165

String, Textfield, Textformat 14 173

14.1 Strings erzeugen und String-Wert auslesen 173

14.2 Länge 174

14.3 Verkettung 174

14.4 Escape-Sequenzen und Sonderzeichen 174

14.5 ASCII-Zeichensatz 176

14.6 Teilstrings extrahieren 178

14.7 Teilstrings ermitteln 179

14.8 Groß-/Kleinbuchstaben 179

14.9 Text, Textfelder 180

14.10 Textauszeichnung/-formatierung 184

14.10.1 TextFormat 184

14.10.2 Formatierung mit HTML 188

14.10.3 Formatierung mit CSS 190

14.11 Darstellung größerer Textmengen 192

14.12 Eingabetext 193

Math-Klasse 15 199

15.1 Eigenschaften: Konstanten 199

15.2 Methoden 200

15.2.1 Auf- und Abrunden 200

15.2.2 Zufallszahlen 201

15.2.3 Weitere Methoden 205

Color-/ColorTransform-Klasse 16 207

16.1 Klassenpakete und Instanziierung von Klassen 207

16.2 Vollständiges Einfärben 208

16.3 Einfärben mit Hilfe einzelner Farbkanäle 209

Maus und Tastatur 17 213

17.1 Die Mouse-Klasse 213

17.1.1 Eigene Cursor 213

17.1.2 Mausereignisse 215

17.2 Tastatur 218

Trang 9

BitmapData- und Filter-Klasse

18 221

18.1 Bitmap versus Vektor 221

18.2 Instanziierung der BitmapData-Klasse 223

18.3 Eigenschaften der BitmapData-Klasse 224

18.4 Methoden der BitmapData-Klasse 224

18.4.1 Dispose() 225

18.4.2 FillRect(), floodFill() 226

18.4.3 GetPixel(), getPixel32(), setPixel(), setPixel32() 227

18.4.4 LoadBitmap(), draw(), copyPixels(), clone() 229

18.4.5 Noise(), perlinNoise() 232

18.5 Optimierung mit Hilfe von BitmapData 235

18.6 Filter 235

18.6.1 Bevel-Filter 236

18.6.2 Blur-Filter 237

18.6.3 DropShadow-Filter 238

18.6.4 Glow-Filter 238

18.6.5 GradientBevel-Filter 239

18.6.6 GradientGlow-Filter 239

18.6.7 ColorMatrix-Filter 240

18.6.8 Convolution-Filter 241

18.6.9 DisplacementMap-Filter 242

Sound 19 245

19.1 Sound abspielen und stoppen 245

19.2 Einen Sound loopen 248

19.3 Externe Sounds 249

Externe Assets 20 251

20.1 Laden externer swf-Dateien 252

20.2 Eigenschaften der geladenen Dateien 257

20.3 Anzeigen der Ladekontrolle (Preloader mit getBytesLoaded()) 263

20.4 Überblenden bei Ladevorgängen 270

20.5 Alternative Ladekontrolle (Preloader mit der MovieClipLoader-Klasse) 275

20.6 Beispiel modulare Website 276

20.7 Code 280

XML 21 281

21.1 Aufbau von XML-Dokumenten 281

21.2 Laden von XML-Dokumenten (new XML, load(), onLoad, onData) 284

21.3 Zugriff auf den gesamten Inhalt einer XML-Datei (firstChild, ignoreWhite) 286

21.4 Verarbeitung einzelner Daten 287

Tween- und TransitionManager-Klasse 22 291

22.1 Tween-Klasse 291

22.2 Beschleunigungsklassen und -methoden 292

22.3 Eigenschaften (duration, finish, FPS, position, time) 294

22.4 Methoden 294

Trang 10

xi Inhaltsverzeichnis

22.5 Ereignisse 295

22.6 Sukzessive Animation verschiedener Eigenschaften 296

22.7 TransitionManager-Klasse 298

22.8 Eigenschaften, Methoden und Ereignisse 299

22.9 Übergangstypen 300

Debugging 23 303

23.1 Fehlertypen 303

23.2 Erste Fehlerkontrolle mit Auto-Format 304

23.3 Das Nachrichtenfenster 308

23.4 Der integrierte Debugger 312

Geskriptete Animationen 24 317

24.1 Animationskategorien 317

24.2 Einmalige Animation 318

24.3 Animation mit onEnterFrame und fester Schrittweite 319

24.4 Animation mit setInterval() und fester Schrittweite 325

24.5 Zeitsteuerung 329

24.6 Dynamische Schrittweite 330

24.7 Feste Schrittanzahl 333

24.8 Fehlerquelle Schleife 337

24.9 Überprüfung von Grenzwerten 338

24.10 Grenzbedingung und Verwendung von Animationsobjekten 339

24.10.1 Löschen des Objekts 340

24.10.2 Bouncing off 342

24.10.3 Screen wrap 343

24.10.4 Neue Zufallsposition 344

Trigonometrie 25 345

25.1 Einige Grundlagen der planen Trigonometrie 345

25.2 Abstände zwischen Objekten 347

25.3 Kreise und Ellipsen 349

25.4 Spiralen 351

25.5 Code 354

25.6 Spiralförmige Animation eines Objekts 354

25.7 Sinustäuschung 357

25.8 Drehung eines Objekts zu einem anderen Objekt 358

25.9 Interaktiver Schlagschatten 360

25.10 Code 362

Effekte (Text 26 ) 365

26.1 Text vergrößern und ein-/ausblenden 365

26.2 Code 371

26.3 Einzelne Zeichen einfärben 372

26.4 Code 375

26.5 Einzelne Zeichen vergrößern und verkleinern 377

26.6 Code 378

26.7 Text mit Farbverlauf 378

26.8 Code 383

26.9 Schreibmaschineneffekt 385

Trang 11

26.10 Text einblenden aus Zufallsbuchstaben 386

26.11 Code 389

26.12 Weitere Effekte 390

Effekte (Grafik 27 ) 391

27.1 Einfärben über einzelne Farbkanäle 391

27.2 Code 397

27.3 Organische Moleküle 399

27.4 Code 402

27.5 Beleuchtungseffekt mit Maske 402

27.6 Code 405

27.7 Überblendeffekt mit Maske 406

27.8 Code 409

27.9 Mosaik-Effekt 410

27.10 Code 413

Effekte (Maus) 28 415

28.1 Maus(ver)folger 416

28.2 Code 426

28.3 Initialisierung von Animationen 428

28.4 Code 432

28.5 Eigenschaftsänderungen 433

28.6 Code 435

Interface und Navigation 29 437

29.1 Check Boxes 437

29.2 Radio Buttons 440

29.3 Combo-Box 442

29.4 Code 446

29.5 Variante 447

29.6 Slider 448

29.7 Drag and Drop-Elemente 449

29.8 Code 453

29.9 Einfaches Fenster-System mit scale9Grid 454

29.10 Code 460

29.11 Varianten und Erweiterungen 462

Menü-Systeme 30 463

30.1 Kreismenüs 464

30.2 Code 471

30.3 Elliptisches Menü 473

30.4 Code 479

30.5 Akkordeon 480

30.6 Code 485

30.7 Drop Down-Menü 486

30.8 Code 490

Bildergalerien 31 493

31.1 Einfache Galerie mit Slider und internen Assets 494

31.2 Code 502

31.3 Eine Variante 503

Trang 12

xiii Inhaltsverzeichnis

31.4 Code 506

31.5 Galerie mit externen Assets 506

31.6 Code 518

31.7 Einige Varianten 520

Spiele 32 521

32.1 Pairs 521

32.2 Code 527

32.3 Puzzle 528

32.4 Code 539

Ressourcen 33 543

33.1 Literatur 543

33.2 Lernvideos 545

33.3 Webseiten 546

Sachverzeichnis 551

Trang 13

Abbildung 1: Standardsymbole zur Entwicklung eines Flowcharts 14

Abbildung 2: Beispielhaftes Flussdiagramm (Programm logik) 15

Abbildung 3: Variablen- und Funktionsdefinition 23

Abbildung 4: Anweisungsblock 24

Abbildung 5: Argument, Parameter, Schleife 24

Abbildung 6: Anweisung, Bedingung, Funktionsaufruf 25

Abbildung 7: Integrierter AS-Editor 31

Abbildung 8: Zuweisung eines Objektskripts 36

Abbildung 9: Fixieren des Skriptfensters 36

Abbildung 10: Operanden und Operatoren 41

Abbildung 11: Codehinweise zu Datentypen 55

Abbildung 12: Arraylänge, -index und -inhalte 71

Abbildung 13: Verwendung einer parametrisierten Funktion 90

Abbildung 14: Vorgegebene Funktionen 93

Abbildung 15: Fehlermeldung bei Endlosschleife 111

Abbildung 16: Eigenschaftsfenster eines MovieClips auf der Bühne 113

Abbildung 17: Verschachtelter MovieClip auto 115

Abbildung 18: Pfadhierarchie 116

Abbildung 19: Relative Adressierung mit _parent 119

Abbildung 20: Kartesisches Koordinatensystem 119

Abbildung 21: Kartesisches Koordinatensystem in Flash (Hauptzeitleiste) 120

Abbildung 22: Skalieren eines MovieClips 123

Abbildung 23: Spiegelung mit _xscale 124

Abbildung 24: Positionierung der MovieClips 128

Abbildung 25: Überlappende MovieClips 134

Abbildung 26: Beispielhafter Aufbau der Übung 137

Abbildung 27: Kollisionserkennung mit hitTest() 150

Abbildung 28: Ergebnis von getBounds() bei verschiedenen Koordinatensystemen 152

Abbildung 29: Beispiel einer geskripteten Zeichnung 157

Abbildung 30: Haus und Grundstück des Autors 158

Abbildung 31: Zur Funktionsweise von curveTo() 159

Abbildung 32: Zweifarbiger, radialer Farbverlauf Rot – Orange 161

Abbildung 33: Koronaartiger Grafikeffekt mit Verlaufs füllung 163

Abbildung 34: Verschiebung des Verlaufsmittelpunkts 163

Abbildung 35: Oval 168

Abbildungsverzeichnis

Trang 14

xvi Abbildungsverzeichnis

Abbildung 36: Händisch erstelltes Textfeld 180

Abbildung 37: Textformatierung mit der TextFormat-Klasse 186

Abbildung 38: Erweiterte Textformatierung mit der TextFormat-Klasse 186

Abbildung 39: Verwendung der Komponente UIScrollBar 193

Abbildung 40: Eingabefeld für die Mail-Adresse 196

Abbildung 41: Einfärben eines MovieClips 208

Abbildung 42: Erweiterte Farboptionen einer MovieClip-Instanz 209

Abbildung 43: Eigener Mauszeiger in Aktion 214

Abbildung 44: Erzeugung eines Punktrasters mit setPixel() 228

Abbildung 45: Erzeugung eines zufälligen Musters mit setPixel32() 228

Abbildung 46: Ausschnittweises Kopieren einer Grafik 231

Abbildung 47: Erzeugung einer Störung mit Hilfe der perlinNoise()-Methode 234

Abbildung 48: Skinners „Pflanzengenerator“ 236

Abbildung 49: Bevel-Filter 237

Abbildung 50: Bevel-Filter mit maximaler Stärke 237

Abbildung 51: GradientBevel-Filter 239

Abbildung 52: 4 × 5-Matrix des ColorMatrix-Filters 240

Abbildung 53: DisplacementMap-Filter 243

Abbildung 54: Einstellungen für das Sound-Verhalten 246

Abbildung 55: Weitere Einstellungen für das Sound-Verhalten 247

Abbildung 56: Externer Ladevorgang in der Hauptzeitleiste 253

Abbildung 57: Auswirkungen von _root auf externe Ladeprozesse 255

Abbildung 58: Verschachtelte Ordnerstruktur für externe Lade vorgänge 255

Abbildung 59: Fehlermeldung bei fehlgeschlagenem Ladeaufruf 256

Abbildung 60: Eigenschaftsänderungen bei externen Ladevorgängen 258

Abbildung 61: Fehlerhafte Positionierung einer extern geladenen Grafik 260

Abbildung 62: Bandbreiten-Profiler zur Kontrolle des Ladevorgangs 261

Abbildung 63: Konfiguration der Download-Simulation 262

Abbildung 64: Simulation eines externen Ladevorgangs 262

Abbildung 65: Zeichnen der Elemente des Ladebalkens 269

Abbildung 66: Aufbau der Anwendung 273

Abbildung 67: Phase 1 des Ladevorgangs 274

Abbildung 68: Phase 2 des Ladevorgangs 274

Abbildung 69: Phase 3 des Ladevorgangs 274

Abbildung 70: Datei literatur1.xml im Internet Explorer 282

Abbildung 71: Fehlerhaftes XML-Dokument im Internet Explorer 283

Abbildung 72: Beschleunigungseffekt Back.easeIn 293

Abbildung 73: Beschleunigungseffekt Bounce.easeIn 293

Abbildung 74: Beschleunigungseffekt Elastic.easeIn 293

Abbildung 75: Beschleunigungseffekt Regular.easeIn 293

Abbildung 76: Beschleunigungseffekt Strong.easeIn 293

Abbildung 77: Sukzessives Ausführen mehrerer Tweens 297

Abbildung 78: Abprallen am rechten Rand 297

Abbildung 79: Fehlermeldung im Compiler-Fenster (1) 304

Abbildung 80: Fehlermeldung im Compiler-Fenster (2) 305

Abbildung 81: Fehlermeldung im Compiler-Fenster (3) 306

Abbildung 82: Fehlermeldung im Compiler-Fenster (4) 306

Abbildung 83: Fehlermeldung im Compiler-Fenster (5) 307

Trang 15

Abbildung 84: Auflistung aller Variablen zur Laufzeit 313

Abbildung 85: Abspeichern des Inhalts des Nachrichtenfenster 313

Abbildung 86: Debugger-Fenster 314

Abbildung 87: Animation durch permanente Änderung der Drehung 319

Abbildung 88: Horizontale und vertikale Bewegung 320

Abbildung 89: Bewegung und Vorzeichenumkehr 323

Abbildung 90: Positionsberechnung über wechselnde Entfernung (1) 332

Abbildung 91: Positionsberechnung über wechselnde Entfernung (2) 332

Abbildung 92: Berechnung der Schrittweite aus Schrittanzahl und Entfernung 334

Abbildung 93: Bewegung und Grenzbedingung 339

Abbildung 94: Überschreiten des Grenzwertes 339

Abbildung 95: Animationsobjekt innerhalb/außerhalb der Bühne 341

Abbildung 96: Abprallen am rechten Screenrand 343

Abbildung 97: Rechtwinkliges Dreieck 345

Abbildung 98: Abstandsmessung zwischen zwei beliebigen Punkten und der Satz des Pythagoras 346

Abbildung 99: Trigonometrische Funktionen und Kreisberechnung 346

Abbildung 100: Der Einheitskreis 347

Abbildung 101: Abstandsmessung zwischen MovieClips 347

Abbildung 102: Spirale mit linear anwachsendem Radius 352

Abbildung 103: Spirale mit exponentiell anwachsendem Radius 353

Abbildung 104: Spiralförmig zu animierende Rakete 355

Abbildung 105: Spiralförmig animierter Bleistift 356

Abbildung 106: Sinustäuschung 358

Abbildung 107: Ausrichtung des Fahrzeugs vor der Drehung zur Maus 359

Abbildung 108: Veränderung des Schlagschattens per Maus 359

Abbildung 109: Animierter Text (Änderung von Größe, Deckkraft, Position) 365

Abbildung 110: Einbetten eines Fonts in der Bibliothek 366

Abbildung 111: Animiertes Einfärben einzelner Buchstaben 373

Abbildung 112: Text mit statischem Farbverlauf 379

Abbildung 113: Farbverlauf Rot – Gelb – Grün 380

Abbildung 114: Verschiedene Ausrichtungen des Farbverlaufs 381

Abbildung 115: Aufbau der Animation mit Farbverläufen 382

Abbildung 116: Schreibmaschineneffekt 385

Abbildung 117: Text einblenden aus Zufallsbuchstaben 387

Abbildung 118: Färben über einzelne Farbkanäle 391

Abbildung 119: Einfärbung eines per Filter-Klasse erstellten Schattens 397

Abbildung 120: Organische Erscheinung per Ebeneneffekt 399

Abbildung 121: Simulation eines Spotlights 403

Abbildung 122: Überblendeffekt mit Hilfe einer Maske 406

Abbildung 123: Mosaik-Effekt (1) 410

Abbildung 124: Mosaik-Effekt (2) 410

Abbildung 125: Ermittlung eines Farbpixels 412

Abbildung 126: Text als Mausverfolger 416

Abbildung 127: Uhr in Ruhestellung 419

Abbildung 128: Uhrteile folgen der Maus 419

Abbildung 129: Aufbau der Uhr ohne Zeitanzeige 422

Trang 16

xviii Abbildungsverzeichnis

Abbildung 130: Blätteranimation nach Mausbewegung 428

Abbildung 131: Alternative Objektformen 433

Abbildung 132: Formänderung nach Mausbewegung 433

Abbildung 133: Check Boxes des Workshops 437

Abbildung 134: Aufbau von mcRecht 438

Abbildung 135: Radio Buttons 440

Abbildung 136: Aufbau von mcKreis 441

Abbildung 137: Combo-Box des Workshops 442

Abbildung 138: Bibliotheks-Elemente der Drag and Drop-Übung 449

Abbildung 139: Einzelelemente eines Fensters 455

Abbildung 140: Positionsbestimmung der Fensterteile 456

Abbildung 141: Kreisförmiges Menü 464

Abbildung 142: Aktiviertes Kreismenü 466

Abbildung 143: Aufbau des elliptischen Menüs 473

Abbildung 144: Anzeigen der Menüelemente 475

Abbildung 145: Scheitelpunkte der Animation 477

Abbildung 146: Akkordeon-Menü des Workshops 480

Abbildung 147: Aufbau des MovieClips mcFenster 481

Abbildung 148: Drop Down-Menü des Workshops 486

Abbildung 149: Originalgrafik (verkleinert) 494

Abbildung 150: Thumbnail-Typ 1 494

Abbildung 151: Thumbnail-Typ 2 494

Abbildung 152: Thumbnail-Typ 3 494

Abbildung 153: Infografik mit Bildergalerie 495

Abbildung 154: Aufbau des MovieClips mcBild 496

Abbildung 155: Aufbau des MovieClips mcSlider 496

Abbildung 156: Aufbau des MovieClips mcMaske 497

Abbildung 157: Variante der Bildergalerie 503

Abbildung 158: Aufbau des MovieClips mcMaske bei nicht aktivierter Maske 504

Abbildung 159: Aufbau der Galerie mit externen Assets 507

Abbildung 160: Ordnerstruktur der Galerie 507

Abbildung 161: Aufbau der Thumbnails 514

Abbildung 162: Aufbau Memory-Spiel 521

Abbildung 163: Karten und Bilderset 522

Abbildung 164: Zufallsverteilung der Karten in aKarten 523

Abbildung 165: Puzzlespiel 528

Abbildung 166: Umrisse der Puzzleteile 529

Abbildung 167: Registrierungspunkt und gedachtes Quadrat 529

Abbildung 168: Puzzleteile entsprechend der Array-Elemente 530

Abbildung 169: Begrenzungsrechteck und Registrierungspunkt von mcPuzzle6 533

Abbildung 170: Puzzleteile ohne Maske 535

Abbildung 171: Puzzleteile mit BevelFilter 536

Trang 17

A Kohl, ActionScript 2, doi:10.1007/978-3-540-35182-5, © Springer 2011

ActionScript (kurz: AS), die in Flash integrierte

Script-Sprache, hat sich im Laufe der Zeit zu einem

unverzichtbaren Tool im Arsenal des Webentwicklers

gemausert Interaktive Anwendungen aller Art bis

hin zu sogenannten Rich Internet Applications

las-sen sich mittlerweile mit Hilfe dieser Sprache

reali-sieren Diese Mächtigkeit hat allerdings ihren Preis,

steigt doch mit den Möglichkeiten zugleich auch die

Lernkurve, um sich AS anzueignen, mit jeder

Flash-Version weiter an Darum möchte Sie das vorliegende

Buch bei der Hand nehmen und behutsam durch den

Script-Dschungel führen

Einsteiger-Bücher gibt es viele, und wenn man

ei-nes kennt, kennt man die meisten anderen auch

De-ren größtes Manko ist der Versuch, möglichst viele

AS-Befehle abzudecken Das sieht zwar im

Inhalts-verzeichnis beeindruckend aus, doch spätestens dann,

wenn man an einem konkreten Projekt sitzt, werden

einem allzu schmerzhaft die Lücken bewusst, die man

sich angeeignet hat Denn derartige Bücher führen

in die Themen anhand von Code-Schnipseln ein, die

zwar leicht verdaulich sind, aber kaum in die Tiefe

ge-hen Außerdem stehen diese Schnipsel oft

zusammen-hanglos und mitunter etwas verlegen im Raum herum

Für den Anfänger fehlt daher nicht selten die

Orien-tierung, wo man sie in einem konkreten, dem

Produk-tionsalltag nahe stehenden Zusammenhang einsetzen

kann Das ist etwa so, als wollte man für eine Reise

nach Frankreich Französisch lernen und würde dabei

ein Lexikon verwenden anstelle eines Sprachführers

Daher verfolgt das vorliegende Buch einen

ande-ren Ansatz Wir verzichten hier auf eine lexikalische

Auflistung und Behandlung aller AS-Sprachelemente

Für diesen Zweck genügt zumindest prinzipiell die

Flash-Hilfe Statt dessen konzentrieren wir uns auf

ausgesuchte Konzepte und Elemente sowie deren

Be-deutung in der Praxis Eine derartige Auswahl muss notgedrungen subjektiv ausfallen Immerhin spiegeln sich in ihr zahlreiche Jahre Programmier- und Lehrer-fahrung wieder, so dass sie nicht völlig willkürlich ist Die Konzepte und Elemente werden zwar am konkre-ten Beispiel von ActionScript behandelt, besitzen je-doch zu einem beträchtlichen Teil sprachunabhängig Gültigkeit Dazu gehören beispielsweise Variablen, Arrays oder Kontrollstrukturen, die von der Idee her auch in anderen Sprachen wie PHP und Javascript vorkommen Ebenso ist die Beschreibung des Ent-wicklungsprozesses eines Programms nicht an Flash gebunden Damit werden Sie in die Lage versetzt, sich

im Fall der Fälle relativ einfach in andere Sprachen einzuarbeiten, falls Sie sich die vorgestellten Kon-zepte angeeignet haben Denn es gehört zu den ange-nehmen Seiten der Programmierung, dass zahlreiche Sprachen mit vergleichbaren Konzepten arbeiten, so dass solide Kenntnisse in einer Sprache das Wechseln

zu einer anderen durchaus erleichtern können Man kann mitunter sogar Lösungen aus einer Sprache in eine andere übertragen, ohne diese Lösung selbst von Grund auf neu entwickeln zu müssen

Der erste Teil des Buches beginnt mit einem blick über die Geschichte von ActionScript, gefolgt von drei Kapiteln, die über die Vorgehensweisen bei der Programmentwicklung u a anhand eines in Pseudo-Code formulierten Programms zum Kochen von Kaffee – Genuss für Geist und Körper gleicher-maßen – informieren Gerade die relative Zugänglich-keit von AS verleitet schnell dazu, einfach mal „drauf los zu programmieren“ – und spätestens dann, wenn man den eigenen Code nach einigen Wochen erwei-tern oder ändern muss, türmt sich ein Berg an Prob-lemen auf, weil man ihn aufgrund mangelhafter Pla-nung und Strukturierung weder richtig versteht noch

Trang 18

Über-2 Kapitel 1 Einleitung

einfach modifizieren kann Daher kann die Bedeutung

sinnvoller Planung im voraus gar nicht oft genug

be-tont werden

Anschließend folgen kapitelweise Beschreibungen

einzelner Sprachelemente und Strukturen wie

Opera-toren, Variablen, Kontrollstrukturen sowie der

wich-tigsten Klassen wie MovieClip, BitmapData, XML

etc Besonderen Raum nimmt die MovieClip-Klasse

ein, da kaum eine Applikation ohne sie auskommen

kann Diese Kapitel stellen das jeweilige Element vor

und geben einzelne Codebeispiele, um ihren Einsatz

zu verdeutlichen

Damit man auch tatsächlich erfährt, was es mit

die-sen Elementen in der freien Wildbahn da draußen auf

sich hat, bietet der zweite Teil zahlreiche Workshops,

in denen sie immer wieder in den verschiedensten

Zusammenhängen auftauchen Dadurch gewinnt das

ansonsten recht abstrakte Erlernen von „Vokabeln“

ei-nen unmittelbaren Praxisbezug, denn die behandelten

Themen kommen zu weiten Teilen so oder in einer

abgewandelten Form auch tatsächlich im

Produkti-onsalltag vor Aus didaktischen Gründen musste zwar

manches gekürzt oder geändert werden, da der Platz

im vorliegenden Buch einfach nicht ausreichte, alles

erschöpfend zu behandeln So manches dort

verwen-dete Skript lässt sich noch optimieren Damit ginge

jedoch die relativ leichte Zugänglichkeit und

Ver-ständlichkeit verloren Dessen ungeachtet bieten die

Workshops genügend Masse, um einerseits die

Spra-che am lebenden Objekt einzuüben und andererseits

Einblick in die tägliche Praxis der

programmierorien-tierten Flash-Entwicklung zu gewinnen

An dieser Stelle bemerkt der Autor

zugegebe-nermaßen mit einer gewissen inneren Freude, dass

man Skripte aus einem Buch nicht durch schlichtes

Kopieren in Flash einfügen kann, sprich: Das

Ler-nen mit diesem Buch macht nur Sinn, wenn Sie den

angesprochenen Code wirklich selbst eingeben Wer

Buchstabe für Buchstabe alles abtippt, wird eher

da-rüber nachdenken, was er tut, als wenn man einfach

nur kopiert Kopieren und kapieren sind zwei

ver-schiedene Dinge Um das Schreiben zu erleichtern,

befindet sich am Ende der meisten Workshops des

zweiten Teils eine komplette Auflistung des aktuell

behandelten Codes Innerhalb der Workshops wird er

abschnitt-, mitunter auch zeilenweise entwickelt und

jeweils besprochen

Einige Übungen im ersten und nahezu alle

Bei-spiele im zweiten Teil arbeiten mit einer sogenannten

Standarddatei Damit ist lediglich eine simple Datei gemeint, die über folgende Eigenschaften ver-fügt:

16 × 9, mal eine interaktive Animation mit 25 BpS vor einem schwarzen Hintergrund erstellt werden – kurz,

es gibt endlos viele verschiedene Möglichkeiten, mit welchen Einstellungen man im Einzelnen ange-messen arbeitet Da es im vorliegenden Buch um die Aneignung von Techniken, nicht jedoch um die op-timale Realisierung spezifischer Applikationen geht, verwenden wir einfach eine Standardeinstellung, die Sie Ihren besonderen Bedürfnissen im Einzelfall an-passen müssen

Obgleich das Buch aus zwei Teilen besteht, ist es nicht notwendig, erst Teil 1 und anschließend Teil 2

zu goutieren Wer die theoretischen Grundlagen herrscht, kann gerne direkt mit dem Workshop-Teil arbeiten In dem Fall sollte man allerdings das Ka-pitel zu Framework und Code-Organisation kennen,

be-da dort eine Vorgehensweise erläutert wird, die in den Workshops zur Anwendung kommt

Wer keinerlei Skriptkenntnisse besitzt, sollte gen systematisch alle Kapitel des ersten Teils durch-arbeiten, wobei es sich empfiehlt, die vorliegende Reihenfolge einzuhalten, da sie aufeinander bezogen sind Die Kapitel des zweiten Teils dagegen liegen unabhängig voneinander vor, so dass ein beliebiges Kapitel zum Lernen verwendet werden kann Wer sich für Texteffekte interessiert, schlägt eben dort nach, ohne vorher etwa das Kapitel Grafikeffekte gelesen haben zu müssen

dage-Die Workshops fassen thematisch gende Übungen in Kapiteln zusammen So finden sich etwa im Kapitel Effekte (Maus) verschiedene Effekte, die in irgendeiner Form auf den Cursor bezogen sind Die Kapitel werden mit einigen allgemeinen Hinwei-sen zur jeweiligen Bedeutung der konkreten Themen

Trang 19

zusammenhän-und Übungen eingeleitet Danach folgt ein Überblick

über das Ziel der Übung sowie eine sukzessive

Auf-listung der Arbeitsschritte in Form von

Handlungs-anweisungen Die Schritte sind zumeist in einzelne

Blöcke unterteilt, die anschließend erläutert werden

Besonderes Gewicht wird dabei auf die zugrunde

lie-gende Logik gelegt Sie ist letztlich wichtiger als die

korrekte Syntax: Versteht man nicht, wie ein Problem

gelöst wird, nützt eine fehlerfreie Syntax nichts, weil

man nie in die Lage versetzt wird, eine eigene

Prob-lemlösung zu entwickeln Eine Syntax zu erlernen ist

letztlich ein reiner Gedächtnisvorgang, während die

Logik einer weit darüber hinausgehenden

Verstandes-leistung bedarf

An manchen Stellen wird eine konkrete Übung

durch Hinweise auf Varianten ergänzt, deren Code

mitunter vorgestellt wird und mitunter auch nur

er-wähnt wird Solche Stellen sollten Sie als

Aufforde-rung verstehen, um eigene Lösungen zu entwickeln

Der in den meisten Praxisbeispielen vorgestellte Code lässt sich zwar mit einigen Änderungen direkt auf eigene Projekte übertragen, doch sollte man sich

im Klaren sein, was er im Einzelnen bedeutet Dieses Buch ist in erster Linie als Lehrbuch konzipiert und nicht als Kochbuch mit einfach zu kopierenden Re-zepten bzw Codeschnipsel

Viele Probleme ermöglichen mehrere wege und so kann hier vorgestellter Code nur als ein möglicher, in der Praxis bewährter Weg, aber beileibe nicht als allein selig machender verstanden werden.Gerne würde der Autor behaupten, er habe aus di-daktischen Gründen bewusst einige Fehler eingebaut Tatsächlich sind derartige Fehler bei dem vorliegenden Seitenumfang einfach unvermeidlich und der mensch-lichen Schwäche des Autors geschuldet Dafür sei der Leser hier bereits um Entschuldigung gebeten.Happy Coding!

Trang 20

A Kohl, ActionScript 2, doi:10.1007/978-3-540-35182-5, © Springer 2011

ActionScript:

Flash stellt eine vollständige Entwicklungsumgebung

und ein Autorensystem für Online- und

Offlineanwen-dungen nahezu jeder Art dar Aufgrund seiner

umfas-senden Funktionalität hat es sich innerhalb relativ

we-niger Jahre von einem ursprünglich doch recht simpel

gestrickten Animationsprogramm zum Standard

ins-besondere bei der Entwicklung von hoch interaktiven,

multimedialen Anwendungen gemausert Zu diesem

enormen Erfolg trug ganz wesentlich die integrierte

Skriptsprache ActionScript bei, die mittlerweile

annä-hernd so mächtig geworden ist wie eine vollwertige

Programmiersprache

Dabei wiesen die sehr bescheidenen Anfänge

von ActionScript keinesfalls in die Richtung, die

die Sprache nach einigen Jahren eingeschlagen hat

Denn Flash erblickte unter dem Namen

FutureSplash-Animator als nettes kleines Animationsprogramm in

Konkurrenz zu animierten gif-Dateien das Licht der

Welt 1996 wurde das Programm samt deren

Entwick-ler von der im sonnigen Kalifornien ansässigen Firma

Macromedia übernommen Da der Schwerpunkt auf

Animation lag, war die Scriptfähigkeit

notwendiger-weise bedeutungslos In den ersten drei

Flash-Versio-nen bestand sie lediglich aus sehr einfachen Befehlen,

mit denen man Navigationen ähnlich einer

Videosteu-erung vornehmen konnte So war es beispielsweise

möglich, eine Zeitleiste anzuhalten und abzuspielen

oder zu einem bestimmten Frame zu springen Dabei

handelte es sich um weitgehend vorgefertigte

Verhal-tensweisen, also fertigen Skripten, die man mit Hilfe

von Eingabefeldern parametrisieren konnte Ein

di-rekter Zugriff auf den Code existierte nicht

Erst mit Flash 4 schlug gewissermaßen die

Ge-burtsstunde von ActionScript als einer eigenständigen

Scriptsprache mit Elementen, wie man sie von anderen

Sprachen her gewohnt ist Dazu gehören Schleifen,

Variablen und Ausdrücke, was erstmals das Erstellen umfangreicher, durchaus anspruchsvollerer Skripte ermöglichte Offiziell firmierte die Sprache unter der Bezeichnung actions, intern verwendete man schon den heute geläufigen Namen ActionScript

Ab dieser Version wurde die Sprache recht quent ausgebaut und immer näher an internationale Standards herangeführt Bereits Flash 5 erlaubte den uneingeschränkten Zugriff auf den Code mit Hilfe ei-nes integrierten Editors, ohne jedoch auf die von den Vorgängern her bekannte Möglichkeit eines simplen Zusammenklickens von Codeblöcken völlig zu ver-zichten Dahinter stand die eigentlich bis Flash 9 bzw

konse-CS 3 gültige Philosophie, zwei verschiedene gruppen anzusprechen: Einerseits den Programmie-rer, der nicht davor zurückschreckt, komplexe Skripte

Ziel-zu entwickeln, und den Designer, der sich zwar mehr auf die Animationsfähigkeiten von Flash konzentriert, aber gleichzeitig auf eine einfache Art Interaktionen skripten möchte Da die Sprache am ECMA 262- bzw ECMAScript3-Standard ausgerichtet wurde, fanden sich Programmierer, die zuvor insbesondere mit Ja-vascript gearbeitet hatten, recht schnell zurecht Ein positiver Nebeneffekt war die relativ leichte Portier-barkeit von Code aus einer Sprache in eine andere

Um die Entwicklung zu vereinfachen, konnte man zudem in sogenannte Smart-Clips Code und Objekte hineinpacken, so dass sie sich als fertige Elemente einsetzen ließen, ohne dass man auf den Code zugrei-fen musste Ein bisschen erinnerte dieses Konzept an die Behaviors von Director, des damals noch großen Bruders von Flash, das ebenfalls von Macromedia entwickelt wurde

Mit der Versionsnummer 5 wurde Flash, ckend betrachtet, tatsächlich erwachsen Denn es ge-lang, das Image eines vornehmlich für zappelige Intros

Trang 21

rückbli-und Animationen geeigneten Entwicklungstools

abzu-legen (tatsächlich waren diese zappeligen Intros aber

weniger dem Tool als vielmehr den betreffenden

Ent-wicklern anzulasten) Nicht zuletzt eben Action Script

zeigte, was, wenn es voll ausgereizt wurde, möglich

war – von kompletten, durchaus userfreundlichen,

hoch interaktiven Websites über datenbankgestützte

Anwendungen bis hin zu den auch heute noch

allge-genwärtigen Spielen reichte die Anwendungspalette

Beflügelt – oder muss man sagen: berauscht? – vom

Erfolg schob Macromedia mit Flash MX, entstanden

zu einer Zeit, als es plötzlich unmodern geworden war,

Versionsnummern zu verwenden, eine stark

erwei-terte Version von ActionScript nach Die wichtigste,

die Sprache partiell bis heute prägende Neuerung war

ein alternatives Ereignismodell, das es erlaubte, in

einem einzigen Bildscript allen Objekten die

benö-tigten Ereignisse und Aktionen zuzuweisen Die

Ver-wendung eigenständiger Objektscripte wurde damit

prinzipiell obsolet Dadurch gewann der Sourcecode

an Übersichtlichkeit, denn die endlos verschachtelten

Objekte (Movieclips und Buttons) machten es bisher

ausgesprochen leicht, Code irgendwo regelrecht zu

vergraben Die Standardisierung von AS wurde

vor-angetrieben durch eine noch striktere Beachtung des

ECMA-Standards

Neben einer erweiterten, umfangreichen

Funk-tionsbibliothek verfügte Flash MX über eine neue

API, die es erlaubte, dynamische Vektorgrafiken zu

programmieren Aus den Smart-Clips entwickelten

sich die komplexeren Komponenten, die mitunter

schon den Charakter eigenständiger Anwendungen

annehmen konnten Als kleines Schmankerl bot man

Programmieren die Möglichkeit prototypbasierter

ob-jektorientierter Programmierung, wenn auch in einer

recht rudimentären Form

Der starke Ausbau der Scriptmöglichkeiten

ver-deutlichte zugleich, in welche Richtung man sich die

Weiterentwicklung des Programms dachte – letztlich

eine Grundsatzentscheidung, die im Großen und

Gan-zen bis zur aktuellen Version 11 bzw CS5

beibehal-ten wurde Denn während jede neue Version immer

ausgeklügeltere Features für den Programmierer bot,

wurden die Designer hinsichtlich der

Grafikwerk-zeuge bis heute nur mit wenigen interessanten

Neue-rungen bedacht, nämlich die längst überfälligen

Ebe-neneffekte in Flash 8, die in der Tat beeindruckende

Videounterstützung ab Flash MX 2004 und

Bones-Animation sowie (leider nur halbausgegorenes) 3D in

CS4 Mittlerweile scheint auch die Unterstützung der Designer in der Programmierung zu bröckeln, wird doch ActionScript mit jeder Version komplexer und für einen eher unbedarften Neuling undurchdringli-cher Dabei waren es gerade die Designer, die Flash einst entdeckt hatten!

Schon damals wurde als Parole die Entwicklung von RIA, Rich Internet Applications, ausgegeben, also komplette, nicht selten datenbankgestützte Online-Anwendungen Dem war jedoch aller Euphorie zum Trotz Flash (noch) nicht gewachsen, wie der Online-Auftritt von Macromedia selbst bewies

Der Nachfolger Flash MX 2004 machte einen teren großen Schritt nach vorn, indem neben die be-stehende ActionScript -Version das neue AS 2.0 trat, das u a eine bessere Fehlerkontrolle durch eine strikte Typisierung, ein leistungsfähigeres, wenn auch gegen-über vorher umständlicheres Listener-Ereignismodell und vor allem eine an höhere Programmiersprachen angelehnte objektorientierte Programmierung ermög-lichte War Flash mit Version 5 erwachsen geworden,

wei-so geschah dasselbe bei ActionScript mit Version 7 (bzw MX 2004)

Hier wie auch an anderer Stelle musste man als Entwickler jedoch der Entwicklungsgeschichte des Programms Tribut zollen: Um die Abwärtskompatibi-lität zu älteren Flash-Playern zu bewahren, erfolgte die Kontrolle der Typisierung ausschließlich in der Auto-renumgebung, während sich der Player wie schon zu-vor genügsam mit, um es böse zu formulieren, „Code-salat“ zufrieden gab Faktisch bedeutete dies, dass AS 2.0 Code durch die AVM (ActionScript Virtual Ma-chine), die den erstellten Code interpretiert, in AS 1.0 umgewandelt wurde All die schönen neuen Möglich-keiten, die eine an höhere Programmiersprachen an-gelehnte Struktur erlaubten, wurden damit partiell zu-nichte gemacht, und auch die Performance entsprach nicht dem, was man erwarten darf Erst Flash 9 hat hier zu einer grundlegenden Änderung geführt.Aus Entwicklersicht bot ActionScript damit im-merhin eine stabilere Programmierung und eine grö-ßere Funktionalität Andererseits allerdings stieg die Lernkurve für Scriptanfänger stark an Gerade der leichte Zugang zum Scripting war ja bisher eine der wesentlichen Stärken von Flash gewesen Dessen ein-gedenk entschied sich Macromedia zu einem Beibe-halten von AS 1.0

Konsequenter als der Vorgänger ermöglichte Flash 8, das sich wieder mit einer Versionsnummer

Trang 22

7

schmücken durfte, objektorientiertes

Programmie-ren Die Entwickler spendierten dem Programm eine

umfangreiche Klassenbibliothek insbesondere zur

direkten Manipulation von Bitmapgrafiken auf

Pixel-ebene sowie zum Up- und Download von Dateien

Der Zugriff auf Bitmaps erlaubte geskriptete

Ef-fekte, die zuvor gar nicht oder nur unter erheblichem

Aufwand möglich waren Man denke nur an

Bump-mapping, eine Technik, die auf zweidimensionalen

Objekten eine dreidimensionale Oberfläche durch

Tiefeninformationen simuliert Allerdings erwiesen

sich insbesondere die neuen Filter-Klassen im

Ge-brauch als recht sperrig So verlangen sie nach –

sa-lopp formuliert – einem Dutzend Pflicht- und einem

weiteren Dutzend optionaler Parameter, deren Sinn

nicht immer leicht zu erkennen ist Eigentlich sollte

in einem derartigen Fall die Programmhilfe

erschöp-fend Auskunft erteilen Aber Flash 8 präsentiert sich

als die erste Version, deren Dokumentation neuer

Be-fehle und Elemente so unverständlich ist und deren

Beispiele so unglücklich gewählt wurden, dass sie für

Skript-Einsteiger faktisch fast schon wertlos ist Man

gewinnt den Eindruck, sie sei von Spezialisten für

Spezialisten geschrieben – was aber gerade dem Sinn

einer Hilfe widerspricht und angesichts der aufgrund

der Sprachkomplexität steil angestiegenen Lernkurve

schlicht eine Fehlentscheidung darstellt

Flash 9, 2007 auf dem deutschen Markt

erschie-nen, stellt vielleicht nicht nur einen neuen

Meilen-stein, sondern sogar einen Wendepunkt dar Denn

diese Version wartet mit einer stark überarbeiteten,

neuen Version der Scriptsprache, nämlich AS 3.0

auf, die konsequent objektorientiert aufgebaut ist und

sich eigentlich kaum mehr von einer Hochsprache

unterscheidet Ihr wurde im Flash-Player eine eigene

Virtual Machine, AVM2, gewidmet, die unabhängig

neben der aus Kompatibilitätsgründen beibehaltenen

AVM1 enthalten ist Sie zeichnet sich endlich durch

die längst fällige höhere Performance aus, setzt aber

eben auch das erheblich komplexere AS 3.0 voraus

Die Version 10 baut AS 3.0 aus, bietet die

Möglich-keit, Objekte statt Frames zu tweenen, verfügt über

einen modifizierten Editor für Tweens und beschenkt

den Entwickler, wie erwähnt, mit inverser

Kinema-tik und 3D Dessen ungeachtet bleibt noch Raum für

viele weitere Features, die zukünftige Versionen von

Flash sicher bringen werden Interessanterweise hat

der deutsche Markt nach Angaben des Herstellers so

an Bedeutung zugenommen, dass die lokalisierte

Ver-sion von Flash diesmal früher erschienen ist als sonst üblich

Im Rückblick zeigt sich eine permanente, aus viele Wünsche der Flash-Entwickler berücksich-tigende Weiterentwicklung von AS, das sich im Laufe der Jahre zu einer mächtigen Skriptsprache mauserte Sie steht zur Zeit noch konkurrenzlos da – auch wenn sich am Horizont in Form von Microsofts Silverlight sowie HTML5 dunkle Wolken andeuten

durch-Der enorme Erfolg von AS birgt gleichzeitig ein Risiko in sich, das in keiner Version so deutlich zum Vorschein trat wie bei Flash 9 bzw AS 3.0 Denn diese Sprachversion ist derart umfangreich geworden, dass sich ein Einsteiger mit einer fast ähnlich steilen Lernkurve herumschlagen muss wie bei einer höheren Programmiersprache Insofern steht Flash an einem Scheideweg: Sollen zukünftige Versionen die Funk-tionalität der Scriptsprache wie bisher weiter aus-bauen? Wie wäre es beispielsweise mit einer echten 3D-Unterstützung, wie sie bereits seit Jahren der lang-sam in die Vergessenheit sinkende, einst große Bruder von Flash, nämlich Director, beherrscht? Das häufig gehörte Argument, damit wachse der Player notwen-digerweise auf eine Größe von mehreren MB an, wird immer unbedeutender angesichts der Tatsache, dass DSL mittlerweile als Standard gelten darf Das würde natürlich alle professionellen Entwickler und Programmierer freuen, geschähe aber zum Leidwesen der Designer und Gelegenheitsprogrammierer.Oder soll man stärker die Designer berücksichti-gen, die nach Jahren erst wieder mit den Ebeneneffek-ten in Flash 8 und der IK sowie einem überarbeiten Motion-Editor in Flash 10 ein Zückerchen geboten bekamen, während sich die meisten anderen neuen Features eher auf die Programmierung bezogen? So mancher Designer würde sich eine bessere Unterstüt-zung bei Animationen wünschen Schön wären bei-spielsweise verschiedene Kamera-Perspektiven, wie sie etwa in ToonBoom-Studio schon lange integriert sind Sie würden die Erstellung von Animationen nicht unwesentlich erleichtern

Unabhängig davon, wie zukünftige Flash-Versionen aussehen, sind heutige „Flasher“ zunehmend gezwun-gen, mit ActionScript umzugehen Denn eben weil es nicht mehr das simple Animationstool von einst ist, sondern eine mächtige Entwicklungsumgebung, deren Potential aber erst wirklich ausgeschöpft wird, wenn man sich der Scriptsprache bedient, werden selbst Designer mit Programmierung konfrontiert Moderne

Trang 23

Webseiten glänzen nicht alleine durch attraktives

De-sign, sondern bieten ein hohes Maß an Funktionalität,

das sich nur noch über Programmierung herstellen

lässt Das gilt erst recht für Applikationen, also

voll-ständige Anwendungen, die, glaubt man den Auguren

der Branche, dereinst Desktop-Applikationen

weitge-hend ersetzen werden (auch wenn das noch eher

Zu-kunftsmusik darstellt) Aus dem Flash-Designer wird

ein Flash-Entwickler, für den solide Grundkenntnisse

in ActionScript unverzichtbar sind

Damit stellt sich die Frage nach der AS-Version,

mit der man arbeiten soll Für den gestandenen

Pro-grammierer kann die Antwort nur lauten: AS 3.0

Denn so lassen sich endlich Konzepte umsetzen, die

aus der professionellen Softwareentwicklung bekannt

und jahrelang erfolgreich eingesetzt wurden Gerade

größere, komplexere Projekte profitieren von den

Möglichkeiten dieser Version

Die Mehrzahl der Flash-Entwickler gehört jedoch

(immer noch) nicht zu dieser Kategorie, sondern

stammt zumeist aus dem Bereich des Designs und der

Web-Entwicklung Ihnen fehlen daher oft die formalen

Voraussetzungen, um problemlos mit einer derart

kom-plexen, an eine Hochsprache angelehnten

Scriptspra-che zu arbeiten Lohnt sich der Einstieg in AS 3.0?

In den meisten Fällen lautet die Antwort derzeit

wohl: Nein Das mag überraschen, zumal in einem

Buch, das sich mit Programmierung befasst Doch

sollte man mit beiden Füssen auf dem Boden der

Re-alität bleiben:

Für einen Nicht-Programmierer steigt die

Lern-•

kurve bei AS 3.0 so stark an, dass man sich genauso

gut direkt auf eine Hochsprache wie Java stürzen

kann Wie viel Web-Entwickler, prozentual

gese-hen, brauchen Java wirklich? Für ein „normales“

Web-Projekt lohnt sich der Aufwand nicht, eine

Hochsprache zu erlernen, und AS 3.0 liegt, wie

gesagt, aufgrund seiner Komplexität recht nahe an

einer derartigen Hochsprache

Der Erstellungsaufwand für eine

Flash-Anwen-•

dung erhöht sich zunächst, da AS 3.0 einen recht

konsequenten objektorientierten Ansatz verfolgt

So verlangt nun das früher so einfache Zuweisen

eines Ereignisses, abgehandelt in einer einzigen

Zeile, umständlich nach einem Listener sowie

ge-gebenenfalls dem Import von Klassen

Für AS 3.0 reicht es nicht aus, einfach nur neue

Be-•

fehle zu erlernen Vielmehr steckt eine konsequente

Objektorientierung dahinter, die dazu zwingt, vor

einem Projekt eine saubere objektorientierte lyse zu erstellen Sonst kann es schnell geschehen, dass man viele verschiedene Klassen anlegt, die mehrfach dasselbe tun – als Ergebnis erhält man mindestens eben so gefährlichen Codesalat, wie er gerne von gestandenen Programmierern den AS1-Skriptern vorgeworfen wird Eine saubere Klas-senstruktur erhält man nicht en passant, sondern bedeutet einen enormen Lernaufwand Aus jahre-langer Dozententätigkeit weiß der Autor, dass ge-rade dieser Punkt vielen Webentwicklern enormes Kopfzerbrechen bereiten kann und dass viele sich gar nicht die Zeit nehmen (können), um hier richtig einzusteigen

Ana-Flash hatte den enormen Vorteil, dem Designer die

Möglichkeit zu bieten, relativ einfach nen und komplexere Anwendungen zu program-mieren Es konnte zumindest prinzipiell alles aus einer Hand entstehen Wagner spricht zutreffend von der Ein-Mann-Show (Mobile Games mit Flash,

Interaktio-p 8) Das ist zweifelsohne eine der Gründe für die enorme Popularität von Flash als Autorensystem Mit AS3 ändert sich das grundlegend: die Entwick-ler werden zu einem Spezialistentum gezwungen, bei dem eine deutliche Trennung zwischen Coder (Programmierer im eigentlichen Wortsinne) und Designer entsteht AS3 ist schlicht zu komplex,

um auf die Schnelle eine Applikation zu skripten und dabei wirklich zu wissen, was man tut OOP ist eben nichts, was man mal en passent erledigt Den Informatiker freut’s, den Designer graust’s Schon aus rein pragmatischen Gründen wird sich die Mehrzahl der Flash-Entwickler daher sinnvollerweise eher mit AS 2.0 anstatt 3.0 befassen müssen (wollen, sollen) Und dem trägt auch dieses Buch Rechnung, indem es sich weitgehend auf AS 2.0 beschränkt.Bereits Version 2.0 bietet so viele Möglichkeiten, dass sie i d R gar nicht ausgeschöpft werden Auch vor diesem Hintergrund macht es wenig Sinn, sich eine neue, noch mehr (genau so wenig ausgereizte) Features bietende Version anzueignen Es ist schon er-staunlich, wie groß beispielsweise die Kluft zwischen den Möglichkeiten, welche die in Flash 8 eingeführte BitmapData-Klasse bietet, und deren konkrete Ver-wendung ist Anstelle der ColorTransform-Klasse fin-det nach wie vor die veraltete Color-Klasse Verwen-dung Und die Rechnung mit einer Matrix, die uns in

AS 2.0 an mehreren Stellen begegnet und Potential vor allem bei der Programmierung grafischer Effekte

Trang 24

9

besitzt, wird so wenig eingesetzt, weil sie für viele

Flash-Entwickler eher ein Mysterium Tremendum als

ein sinnvolles Hilfsmittel darstellt

Das Problem der richtigen Sprachversion hat wie

kaum ein anderes die Gemüter der Flash-Entwickler

erhitzt, und so manches Flash-Urgestein wie etwa

Philipp Kerman entscheidet sich bei kleineren bis

mittleren Projekten zugunsten von 2.0 anstatt von 3.0

Zudem wartet die neue Sprachversion, falls man nicht

mit CS 4, sondern dem Vorgänger arbeitet, mit einigen

Ungereimtheiten auf, die das Programmieren partiell

erheblich erschweren Dazu gehört insbesondere das

gegenüber bisher ausgesprochen unglücklich

gehand-habte Entfernen extern geladener swf-Dateien sowie

eine deutlich optimierfähige Garbage Collection Kein

Geringerer als Colin Moock hat sich ausführlich mit

derartigen Problemen beschäftigt, und einen Einblick

in die Diskussion findet der geneigte Leser unter:

C Moock: „The Charges Against ActionScript 3.0“,

www.insideria.com/2008/07/the-charges-against-ac-tionscri.html

Brendan Hall und Joshua Davis, beides profilierte Flash-Entwickler, die schon frühzeitig das Potential von Flash sowohl in programmiertechnischer wie de-signerischer Hinsicht ausreizten, wobei insbesondere Davis beide Bereiche zu verknüpfen suchte, urteilen über den heutigen Stand:

„Flash has matured incredibly in the past decade, but it has done so in a way that has blocked non-de-velopers from even getting started The simple fact

of the matter is that with older versions of Flash you could learn the tool and how to program ActionScript almost entirely through creative play With the latest iterations, unless you have a background in object-ori-ented programming, that method of learning by doing

is simply not an option.“

Als Konsequenz aus dieser Malaise entwickelten sie unter dem Stichwort „Hype“ ein Framework, das jedem Interessierten den schnellen und einfachen Zu-griff auf die Programmierfähigkeiten von Flash er-laubt, ohne sich in eine komplex gewordene Program-miersprache einarbeiten zu müssen

Trang 25

A Kohl, ActionScript 2, doi:10.1007/978-3-540-35182-5, © Springer 2011

Programmentwicklung

Programmieren ist eine Wissenschaft für sich – das

mag banal klingen, aber gerade der Neuling, der sich

naturgemäß kopfüber ins Programmieren stürzt, wird

sehr schnell an Grenzen stoßen Einerseits hat sich

Ac-tionScript zu einer recht komplexen, mächtigen

Spra-che entwickelt, andererseits erfordern heutige

Flash-Projekte, die rasch auf viele Hundert oder Tausend

Zeilen Quellcode anwachsen, sorgfältige Planung,

will man nicht in einem Wust aus Spaghetti-Code

und geskriptetem Nonsens untergehen Angemessene

Programmentwicklung setzt i d R strukturiertes,

überlegtes Vorgehen und systematische Planung

vo-raus, um einerseits möglichst effizient und

anderer-seits möglichst fehlerfrei arbeiten zu können Insofern

gleicht das Programmieren einer Anwendung dem

Bau eines Hauses: Bevor man die Baugrube ausheben

kann, muss man sich erst einmal einen

Konstruktions-plan zurecht legen, an dem sich die einzelnen

Baupha-sen orientieren können

3.1 Ansätze (Top-Down, Bottom-Up)

Es gibt keinen Königsweg zum guten Programm, aber

im Laufe der Zeit haben sich einige

Vorgehenswei-sen herausgebildet, um einem die Arbeit zumindest zu

erleichtern Zu den erfolgversprechendsten Methoden

gehören der Top-Down- und der Bottom-Up-Ansatz

Der Top-Down-Ansatz versucht, unabhängig von

konkreten Details einen Gesamtüberblick über ein

Problem zu erhalten Im nächsten Schritt wird es in

möglichst wenige, z B drei oder vier, Teilprobleme

zerlegt Auch auf dieser Stufe geht es noch nicht

vornehmlich um einzelne Details In einem weiteren

Schritt wird jedes Teilproblem seinerseits in einige

wenige Teile zerlegt Dies führt man solange durch, bis eine weitere Unterteilung nicht mehr möglich erscheint Dann befindet man sich auf der untersten Stufe und damit zugleich bei kleinsten Details Dieser Ansatz beschreibt ein Problem in einer Art Pyramide und arbeitet sich von allgemeinen Fragestellungen vor bis hin zur kleinsten Einzelheit Insofern stellt dieser Ansatz eine große Kiste zur Verfügung, in die wir alle Elemente hineinpacken, die ein Problem oder eine Aufgabenstellung charakterisieren Ein zeitlicher Ablauf oder eine logische Verknüpfung zwischen den einzelnen Elementen wird nicht definiert Die Pro-grammierung kann erst einsetzen, nachdem die Ana-lyse vollständig abgeschlossen wurde

Der Vorteil besteht darin, dass man zu jedem punkt einen vollständigen Überblick besitzt, ohne von Detailfragen abgelenkt zu werden Dem stehen aller-dings einige Nachteile gegenüber wie insbesondere die zumeist geringe Flexibilität Denn wenn sich im Laufe der Entwicklung die Problemstellung aus wel-chem Grund auch immer ändert, ist man gezwungen, die Top-Down-Analyse erneut durchzuführen, da sich die Beziehung der Elemente untereinander, u U auch die Elemente selbst nun geändert haben Das Gesamt-gefüge der ursprünglichen Analyse stimmt nicht mehr mit der aktuellen Situation überein

Zeit-Der Bottom-Up-Ansatz dreht den analytischen Prozess um und beginnt am Boden der Pyramide Er greift sich ein Element (z B Objekt, Klasse, Methode etc.) heraus und analysiert alle notwendigen Details möglichst unabhängig von der Frage, wie sich die-ses eine Element in den Gesamtzusammenhang fügt Dann folgt die Analyse des nächsten Elements Dies geschieht solange, bis sich aus den einzelnen Ele-menten der Gesamtzusammenhang erschließen lässt Ist ein Element ausreichend definiert, kann man zu-

Trang 26

12 Kapitel 3 Programmentwicklung und Programmiersprachen

mindest prinzipiell schon mit der Programmierung

beginnen, obwohl die gesamte Analyse noch nicht

abgeschlossen ist

Zu den unbestreitbaren Vorteilen zählt die größere

Flexibilität Weil zunächst kein übergreifender

Zu-sammenhang definiert wird, kann man auch zu einem

späteren Zeitpunkt relativ problemlos weitere

Ele-mente hinzufügen, falls es die Situation erforderlich

macht Zudem kann bereits zu einem frühen Zeitpunkt

Programmcode geschrieben werden Allerdings läuft

man durch die im Anfangsstadium erfolgende

Kon-zentration auf einzelne Details Gefahr, sich darin zu

verlieren und nie den Gesamtüberblick zu erhalten,

der aber notwendig ist, um alle Teile im Rahmen

ei-nes Programms zusammenfügen zu können Zu frühes

Programmieren birgt zudem das Risiko in sich, dass

der aktuelle Code nicht optimal auf den später

hinzu-kommenden Code abgestimmt ist

Nach der Problemanalyse, die zu einer

Beschrei-bung des Programms führt, folgt die Entwicklung

der Programmlogik Während die über die erwähnten

Ansätze realisierte Programmbeschreibung festlegt,

was das Programm tun soll, beschreibt die Logik, wie

es das tun soll Anders als zuvor spielt nun die

Rei-henfolge einzelner Arbeitsschritte eine entscheidende

Rolle

3.2 Algorithmus als Problemlösung

Aus der Problemanalyse muss sich in irgendeiner

Form eine Lösung erarbeiten lassen Sie wird als

Al-gorithmus bezeichnet, worunter man eine endliche

(begrenzte) Anzahl an Schritten zur Lösung eines

ex-akt formulierten Problems versteht Ein Algorithmus

gibt also Handlungsanweisungen und legt so den

Ab-lauf eines Prozesses fest Formal gesehen verfügt eine

derartige Lösung über bestimmte Eigenschaften, zu

denen u a zählen:

Ausführbarkeit

• Selbstverständlich müssen die

Handlungsanweisungen ausführbar sein, also z B

von einer Maschine befolgt werden können Das

ist dann der Fall, wenn sie möglichst

kleinschrit-tig sind und in einer spezifischen, für die Maschine

verständlichen Form wie z B einer

Programmier-sprache dargeboten werden Dazu gehört auch das

eindeutige Vorhandensein aller Informationen, um

den entsprechenden Lösungsprozess ausführen zu können

Endlichkeit

• Die Lösung muss über eine feste Länge an Schritten verfügen Ein Prozess, den wir mit unendlich vielen Schritten beschreiben müss-ten, ließe sich nie als Algorithmus umsetzen.Terminierung

• Der Lösungsprozess muss über eine Endebedingung verfügen, d h es muss festgelegt sein, wann die Ausführung zu Ende ist Dieser Punkt bezieht sich auf die Ausführung, während der vorhergehende Punkt eine Aussage zur Be-schreibung trifft

Determinismus

• Bei jedem beliebigen Schritt des Algorithmus muss eindeutig feststellbar sein, an welcher Stelle man sich gerade befindet Zusätz-lich muss bei gleichen Ausgangsbedingungen bzw Eingaben auch immer das gleiche Ergebnis erzielt werden

Das klingt alles recht abstrakt, beschreibt aber in meiner Form jede Art von Handlungsanleitungen, egal

allge-ob ein Kochrezept, eine Wegbeschreibung oder eine Bedienungsanleitung für ein neues Handy Ja, auch für ein Handy benötigen wir mittlerweile eine Anlei-tung Früher konnte man damit einfach telefonieren, doch das moderne Handy ist längst zum multifunkti-onalen Äquivalent des Schweizer Taschenmessers im Kommunikationsbereich mutiert und widersetzt sich zunehmend einer einfachen Bedienbarkeit nach der klassischen Trial & Error-Methode

Die Problemstellung „Handy bedienen“ resultiert daher in einem umfangreichen Algorithmus „Bedie-nungsanleitung“, der recht komplex ausfallen kann Diese Bedienungsanleitung muss in einer verständli-chen Sprache abgefasst sein, damit die Einzelschritte befolgt werden können (Ausführbarkeit) Was so selbstverständlich klingt, gelingt leider nicht in jedem Fall, weder in der Programmierung noch bei Bedie-nungsanleitungen, oder ist Ihnen klar, wie folgende Anweisung zu deuten ist: „Wenn das Wetter kalt ist, wird die Puff Unterlage sich langsam puffen Entrol-len die Puff Unterlage und liegen auf ihr, dann wird sie von der Wärme sich Inflationen bekommen“ (Jür-gen Hahn: Jetzt zieh den Zipfel durch die Masche; Zürich 1994)?

Verständlicherweise sollten wir bei einem Handy mit zwei, drei Schritten, jedenfalls mit einer fest de-finierten und möglichst geringen Anzahl, in die Lage versetzt werden, einen Gesprächspartner anzurufen

Trang 27

(Endlichkeit) Selbst ein Schweizer Taschenhandy,

mit dem wir gleichzeitig im Internet surfen, unsere

Umgebung filmen und dem Kühlschrank zu Hause die

Anweisung geben, fehlende Lebensmittel automatisch

per E-Mail zu ordern, erlaubt es, zu telefonieren

Das Ergebnis der Arbeitsschritte ist entweder ein

Telefongespräch oder eine Mitteilung über die

(mo-mentane) Unerreichbarkeit des gewünschten

Ge-sprächspartners (Terminierung) In jedem Fall wird

klar, wann der Prozess des Telefonierens endet

Unabhängig davon, wann man sein Handy zückt

und versucht, zu telefonieren, ist das Ergebnis

im-mer dasselbe, nämlich so, wie im vorhergehenden

Abschnitt angesprochen (Determinismus) Der

Pro-zessablauf ist exakt festgelegt, bei jedem Einzelschritt

ist dem Anwender erkennbar, wo er sich gerade

befin-det Und das Ergebnis des Prozesses ist vorhersagbar

Wir müssen nicht damit rechnen, dass unser Handy

bei Betätigen das Haus des Nachbarn sprengt oder

un-ser Auto startet (nun ja, Letzteres ist sicher nur noch

eine Frage der Zeit)

Prinzipiell funktioniert ein Algorithmus für ein

Computerprogramm nicht anders Wenn es uns

den-noch leichter fällt, Handlungsanleitungen bezüglich

des Telefonierens zu verstehen als Programmcode zu

lesen, so liegt das lediglich an der Form, in der uns

die Anweisungen für den Computer begegnen Sie

lie-gen in einer jeweils eilie-genen Sprache vor, die über eine

spezifische Syntax (Struktur, Grammatik) und

Seman-tik (Bedeutung) verfügt Genau das aber gilt auch für

die erwähnte Handlungsanleitung, die nur deshalb

von uns so einfach verstanden werden kann, weil uns

die Syntax und Semantik der verwendeten Sprache

vertraut sind Würde die Anleitung beispielsweise in

Suaheli abgefasst, sähe sie genau so unverständlich

aus wie Programmcode

In einer grundlegenden Hinsicht unterscheiden sich

allerdings Handlungsanleitung und Programmcode

voneinander: Menschen sind in der Lage, mit

unvoll-ständigen Informationen umzugehen, Computer

dage-gen nicht (an dieser Stelle wollen wir den spannenden

Bereich der Fuzzy Logic unbeachtet lassen) Wenn

jemand die Anweisung erhält, für einen Besucher eine

Tasse zu holen, damit dieser sich Kaffee hinein

schüt-ten kann, dürfen wir in den meisschüt-ten Fällen davon

aus-gehen, eine saubere Tasse zu erhalten Ist sie es nicht,

wird sie gespült, oder es erfolgt solange eine Suche,

bis eine saubere Tasse aufgetrieben werden konnte In

einem Computerprogramm dagegen müsste die Tasse

spezifiziert werden: „Sauber“ könnte man als schaft der Tasse bezeichnen, die true, also wahr sein müsste, bevor sie verwendet werden dürfte Andern-falls wäre das Programm nicht in der Lage, zu ent-scheiden, welche Art von Tasse gewünscht wird So wichtig dieser Punkt ist, so häufig machen gerade An-fänger den Fehler, Bedingungen vorauszusetzen, die einem Programm eigentlich explizit mitgeteilt werden müssten Damit schleichen sich Fehler ein, die ausge-sprochen schwer zu bereinigen sind, weil sie zwar der Logik, nicht jedoch der Syntax der verwendeten Pro-grammiersprache widersprechen Syntaxfehler lassen sich durch Tools i d R recht einfach automatisiert finden, Logikfehler dagegen nicht An dieser Stelle künden sich schon lange Nächte an

Eigen-3.3 Hilfsmittel zur Entwicklung von Algorithmen

Gerade am Anfang stellt sich die Frage, wie man denn für ein Problem eine angemessene Lösung entwickeln kann, bevor man den betreffenden Programmcode schreibt Es existieren mehrere Vorgehensweisen, die mit wechselnden Abstraktionsleveln und partiell mit visuellen Hilfsmitteln arbeiten Dazu gehören:Flowchart

• Der Ablauf eines Programms wird mit genormten Symbolen visualisiert Wer beispiels-weise aus dem Design-Bereich zur Programmie-rung findet, kennt eine ähnliche Vorgehensweise Dort dienen Flowcharts dazu, um Strukturen wie etwa den hierarchischen Aufbau eine Site zu erfas-sen In der Programmierung bildet ein Flowchart dagegen einen Prozess ab

Natürliche Sprache In dieser Form haben wir im

vorhergehenden Absatz bereits das Telefonieren angesprochen Gemeint ist, dass man eine Prob-lemlösung in beredter Prosa formuliert, ohne sich

an eine allzu strenge Form zu halten Der Vorteil besteht in der Möglichkeit, schnell eine Handlungs-anleitung zu erhalten, da die verwendete Sprache unserer Alltagssprache entspricht

Pseudo-Code Wer bereits über

Programmierkennt-•

nisse verfügt, kann mit einem Zwitter zwischen beredter Prosa und halbwegs formaler Syntax eine Problemlösung erarbeiten und beschreiben Solcher Code soll möglichst unabhängig von der

Trang 28

14 Kapitel 3 Programmentwicklung und Programmiersprachen

Syntax einer konkreten Programmiersprache

for-muliert werden

Wir wollen uns die Verwendung von Flowcharts

und Pseudo-Code etwas genauer anschauen Dabei

konzentrieren wir uns auf die klassische funktionale

Programmierung, objektorientierte Programmierung

dagegen wird nicht weiter berücksichtigt Wir wählen

diese Vorgehensweise, um die Lernkurve nicht allzu

steil ansteigen zu lassen

3.3.1 Flowcharts

Sucht man eine Vorgehensweise, die einerseits ohne

allzu intensive Programmierkenntnisse funktioniert

und andererseits trotzdem die gewünschte

Programm-funktionalität verständlich abbildet, so empfiehlt

sich ein Flowchart (Flussdiagramm) Es existieren

zahlreiche spezialisierte Programme, die genormte

Symbole zur Erstellung anbieten Leistungsfähig ist

beispielsweise SmartDraw, das sich neben leichter

Bedienbarkeit durch eine ausgesprochen große

Sym-bolbibliothek auszeichnet Natürlich existieren wie

immer im Freeware- und Open Source-Bereich

eben-falls Programme, die durchaus Vergleichbares leisten

Notfalls kann man sich auch mit Flash (bzw einem

beliebigen Vektor-Grafikprogramm) begnügen, denn

die wichtigsten Symbole lassen sich schnell als vieClip oder Grafik-Objekt erstellen

Mo-Um die Entwicklung verständlicher Flowcharts zu ermöglichen, legt die Norm DIN 66001 fest, welche Art von Symbolen verwendet werden sollte In den meisten Fällen reicht es aus, wenn Sie mit den in den Abbildungen 1 und 2 gezeigten Symbolen arbeiten Ein Diagramm könnte beispielhaft so aussehen, wie in Abbildung 2 gezeigt

Diese Abbildung visualisiert in vereinfachter Form den eigentlich erstaunlich komplexen Vorgang des allmorgendlichen Aufbruchs zur Arbeitsstelle Sobald wir über die Türschwelle treten, beginnen die Prob-leme, dargestellt an nur einem exemplarisch behan-delten Beispiel So müssen wir uns die Frage stellen,

ob es regnet oder ob im Laufe des Tages Regen zu erwarten ist Falls ja, nehmen wir einen Regenschirm und marschieren anschließend zur Bushaltestelle Falls nein, gehen wir zu Fuß zum Ziel In beiden Fäl-len endet der Prozess zumeist mit der Ankunft an der Arbeitsstelle

Flussdiagramme sollten bestimmten Regeln gen, die zwar nicht zwingend vorgeschrieben sind, deren Einhaltung aber das Lesen derartiger Grafiken erleichtert:

fol-1 Der Programmablauf (zumindest die allgemeine Logik) erfolgt von oben nach unten und von links nach rechts Im Einzelfall mag es notwendig sein,

Abbildung 1: Standardsymbole zur Entwicklung eines Flowcharts

Trang 29

mal einen Schritt von rechts nach links zu

visua-lisieren, aber das sollte möglichst eine Ausnahme

bleiben Andernfalls fällt es schwer, den Ablauf

korrekt zu erfassen Die Ablaufrichtung entspricht

damit unserer gewohnten Leserichtung

2 Es sollten nur Standardsymbole verwendet werden

Natürlich existieren mehr als die oben

vorgestell-ten Symbole, aber schon mit diesen 8 können Sie

sehr komplexe Programmabläufe visualisieren

Weitere Symbole lassen sich z B für SmartDraw

auf der Webseite des Herstellers herunterladen

(oder einsehen, falls Sie nur mit Flash arbeiten)

Widerstehen Sie auf jeden Fall der Versuchung,

ei-gene Symbole zu kreieren – denn diese können nur

Sie selbst verstehen

3 Jedes Symbol hat entweder nur einen Eingang, nur

einen Ausgang, nur einen Ein- und einen Ausgang

oder einen Eingang und zwei Ausgänge

4 Ein Entscheidungssymbol enthält eine Frage, die

nur mit Ja/Nein beantwortet werden kann Für

jemanden, der es nicht gewohnt ist, mit

Flussdia-grammen zu arbeiten, stellt dies sicher die größte

Herausforderung dar

Flussdiagramme bieten den unschätzbaren Vorteil,

dass sie einen zwingen, die gesamte Programmlogik

in sehr kleine Schritte zu zerlegen Mag einem

vor-her die Logik schon im Großen und Ganzen klar

ge-wesen sein, so ist es dennoch nicht selten, dass man

beim Programmieren feststellen muss, irgend etwas

übersehen oder nicht tief genug durchdacht zu haben

Vor solchen Stolpersteinen schützt ein sauber

ausge-arbeitetes Flussdiagramm Ist diese Arbeit geleistet,

fällt das eigentliche Programmieren insgesamt

leich-ter, da einem nun klar ist, was genau wann geschieht

Als nachteilig erweist sich jedoch der relativ hohe

Zeitaufwand, der mit dem Erstellen von Flowcharts

verknüpft ist, und die eher geringe Flexibilität, da

nachträgliche Änderungen im Programmablauf dazu

zwingen können, weite Strecken des Diagramms neu

erstellen zu müssen

3.3.2 Pseudo-Code

Eine in Pseudo-Code (auch: Schein-Code)

formu-lierte Lösung orientiert sich strukturell allgemein an

Programmiersprachen, formuliert aber die einzelnen

Arbeitsschritte in einer relativ nahe an der sprache liegenden Form Derartiger Code bedient sich bestimmter festgelegter Schlüsselwörter, um die Funktionsweise eines Algorithmus’ oder, allgemeiner, den Ablauf eines Programms sprachunabhängig ab-zubilden Sprachunabhängig bedeutet natürlich, dass

Alltags-sich dieser Code nicht an eine spezifische

Program-miersprache anlehnt (andernfalls würde man ja schon das konkrete Programm schreiben) Eine einfache if-else-Abfrage würde in Pseudocode beispielsweise folgendermaßen geschrieben:

wenn (Bedingung) Anweisung(en) sonst

Anweisung(en)

Abbildung 2: Beispielhaftes Flussdiagramm logik)

Trang 30

(Programm-16 Kapitel 3 Programmentwicklung und Programmiersprachen

Das ActionScript -Äquivalent würde so aussehen:

Da Pseudocode über das Einrücken und über einige

Schlüsselbegriffe Programmiersprachen

näherungs-weise abbildet, ist es zumindest prinzipiell relativ

einfach, daraus den benötigten korrekten Code zu

er-zeugen Stärker als Flussdiagramme setzt Pseudocode

jedoch eine gewisse Erfahrung im Programmieren

vo-raus, um sinnvoll Logiken abbilden zu können

Das obige Beispiel könnte man etwa so

formulie-ren:

function zurArbeitGehen(){

gehe zur Tür hinaus

wenn(Wetter sieht regnerisch aus){

nehme Schirm;

gehe zur Bushaltestelle;

fahre zum Ziel;

}sonst{

gehe zum Ziel;

}

}

Die einzelnen Schritte bleiben gegenüber dem

Flow-chart notwendigerweise gleich In beiden Fällen

kon-trollieren wir beispielsweise das Wetter Nur sieht die

Struktur, in der die Schritte wieder gegeben werden,

durchaus ähnlich aus, wie sie auch in einem konkreten

Programm zu finden wäre:

Anweisungen werden in der Reihenfolge der

Aus-•

führungen untereinander geschrieben Ein

hori-zontales Abweichen wie beim Flowchart (Ja, Nein)

existiert hier nicht

Logisch aufeinander bezogene Anweisungen

Block, der if-Bedingung, erfasst

In einem „richtigen“ Code müsste abschließend noch

der Aufruf der Funktion zurArbeitGehen() erfolgen,

aber auch so ist der Ablauf unserer Lösung zu

erken-nen und nachzuvollziehen

3.4 Beispiel-Algorithmus

„Kaffee kochen“

Der Volksmund weiß, dass Programmierer chig, männlich und exzessive Kaffeetrinker sind Le-diglich das letztgenannte Vorurteil stimmt, weswegen wir uns am konkreten Beispiel des Kaffeekochens an-schauen wollen, wie sich ein komplexeres Programm

dickbäu-in Pseudo-Code entwickeln lässt Wir wählen edickbäu-ine Top-Down-Vorgehensweise

In der allgemeinsten Form bzw auf dem höchsten straktionslevel besteht der fragliche Prozess aus zwei Teilen:

Ab-Kaffee kochen Fertigen Kaffee servierenDas reicht allerdings bei weitem nicht aus, um den betreffenden Prozess zielgerichtet in Gang zu setzen

Es fehlen nämlich konkrete Einzelschritte bzw lungsanweisungen Jeder dieser Teile umfasst eine Reihe von Schritten, die in manchen Fällen von spe-zifischen Bedingungen abhängen Betrachten wir den ersten der genannten Teile, lässt er sich aufsplitten in die Phasen:

Hand-vorbereiten aufbrühenÄhnlich können wir den zweiten Teil untergliedern in:

vorbereiten servieren

In beiden Fällen gehen dem Ergebnis der zesse – fertiger Kaffee, „vollendeter Genuß“ TM – vor-bereitende Schritte voraus In Bezug auf das Aufbrü-hen handelt es sich um:

Trang 31

Teilpro-Kanne mit Wasser füllen

Wasser in Maschine füllen

Kanne in Maschine stellen

Filter in Maschine einsetzen

Pulver in Filter füllen

einschalten

Selbst an dieser Stelle haben wir noch nicht die

kleinstmögliche Schrittfolge erreicht Weitere

Unter-teilungen sind möglich So besteht der erste Punkt, das

Füllen der Kanne, aus folgenden Einzelhandlungen:

Kanne fassen

Zum Wasserhahn gehen

Unter Wasserhahn halten

Wasser fließen lassen

Wasser stoppen

Kanne zur Maschine bringen

Dieses Verfeinern wird solange durchgeführt, bis

man ganz kleinschrittige Anweisungen findet, die

sich nicht mehr unterteilen lassen Für unsere Zwecke

reicht der erzielte Detailgrad aus Zu Übungszwecken

können Sie jedoch gerne alle weiteren Schritte soweit

ausarbeiten, bis sie sich nicht mehr in kleinere

Häpp-chen unterteilen lassen

Auf dieser Basis lässt sich ein Algorithmus

ange-messen formulieren Er sieht zum aktuellen Zeitpunkt

Zum Wasserhahn gehen

Unter Wasserhahn halten

Wasser fließen lassen

Wasser stoppen

Kanne zur Maschine bringen

Wasser in Maschine füllen

Kanne in Maschine stellen

Filter in Maschine einsetzen

Pulver in Filter füllen

einschalten

aufbrühen

Fertigen Kaffee servieren

vorbereiten Tassen nehmen Zucker nehmen Milch nehmen servieren Kaffee in Tasse füllen Zucker geben

Milch gebenWir könnten so fortfahren, bis wir eine zwar endli-che, aber aufgrund der vielen Schritte endlos lang er-scheinende Liste mit Instruktionen erhalten würden Wirklich lesbar und damit verständlich ist eine solche Form allerdings nicht Daher fügen wir eine formale Gliederung ein, die durch eingerückte Zeilen eine hi-erarchische Abhängigkeit anzeigt:

Kaffee kochen vorbereiten Kanne mit Wasser füllen Kanne fassen

Zum Wasserhahn gehen Unter Wasserhahn halten Wasser fließen lassen Wasser stoppen Kanne zur Maschine bringen Wasser in Maschine füllen Kanne in Maschine stellen Filter in Maschine einsetzen Pulver in Filter füllen einschalten

aufbrühen Fertigen Kaffee servieren vorbereiten

Tassen nehmen Zucker nehmen Milch nehmen servieren Kaffee in Tasse füllen Zucker geben

Milch gebenWir können nun auf einen Blick erkennen, dass die Schritte vorbereiten bis aufbrühen im ersten Teil zum Kochen des Kaffees gehören Solche Anweisungs-

Trang 32

18 Kapitel 3 Programmentwicklung und Programmiersprachen

Blöcke lassen sich in Programmiersprachen in

soge-nannten Funktionen erfassen Dabei ist eine bestimmte

Schreibweise bei der Wahl der Funktionsnamen zu

be-rücksichtigen, die wir hier geflissentlich weitgehend

ignorieren wollen, da es zunächst nur um das Prinzip

geht Wir kommen darauf in den nachfolgenden

Ka-piteln zu Variablen und Funktionen in ActionScript

jedoch ausführlicher zu sprechen

Ändern Sie den Pseudo-Code so, wie es die

fett-gedruckten Zeilen anzeigen (aus Gründen der

Über-sichtlichkeit wollen wir ab dieser Stelle derartige

Än-derungen fett auszeichnen):

function kaffeeKochen(){

vorbereiten

Kanne mit Wasser füllen

Kanne fassen

Zum Wasserhahn gehen

Unter Wasserhahn halten

Wasser fließen lassen

Wasser stoppen

Kanne zur Maschine bringen

Wasser in Maschine füllen

Kanne in Maschine stellen

Filter in Maschine einsetzen

Pulver in Filter füllen

Formal gesehen umfasst unser Code nun zwei

Funkti-onsdefinitionen, in denen teilweise ganz konkrete

An-weisungen und Befehle enthalten sind, sowie danach

in den beiden letzten Zeilen folgend zwei aufrufe Diese Aufrufe sorgen dafür, dass die vorher definierten Anweisungen auch wirklich ausgeführt werden Sie sind vergleichbar mit einer Aufforderung

Funktions-an eine Funktions-andere Person, jetzt Kaffee aufzubrühen und

zu servieren

Durch die Verwendung des Schlüsselworts tion sowie der runden Klammern () machen wir deutlich, dass es sich hier um die Definition einer Be-fehlsfolge handelt Mit den geschweiften Klammern {} kennzeichnen wir deren Anfang und Abschluss.Die Übersichtlichkeit erhöht sich weiter, wenn wir die sehr detaillierten Schritte, die zu einer über-geordneten Handlungsanweisung wie beispielsweise Kanne mit Wasser füllen gehören, ebenfalls in eine Funktion auslagern

func-Ändern Sie den Pseudo-Code:

function kaffeeKochen(){

vorbereiten()

aufbrühen }

function fertigenKaffeeServieren(){ vorbereiten

Tassen nehmen Zucker nehmen Milch nehmen servieren Kaffee in Tasse füllen Zucker geben

Milch geben }

Trang 33

kaffeeKochen();

fertigenKaffeeServieren();

Alle Schritte, die zum Vorgang vorbereiten

gehö-ren, haben wir in eine entsprechende Funktion

verla-gert Jedes Mal, wenn wir Kaffee aufbrühen wollen,

rufen wir diese Funktion auf, um alles Notwendige

bereitzustellen

Schauen wir uns den bisherigen Code an,

er-kennen wir, dass es noch eine zweite Stelle gibt,

an der die Anweisung vorbereiten zu finden ist,

nämlich unmittelbar vor dem Servieren des fertigen

Kaffees In einem früheren Abschnitt wurde darauf

verwiesen, dass wir mit zweideutigen Informationen

i d R umgehen können Im aktuellen Beispiel

wür-den Menschen aus dem jeweiligen Kontext darauf

schließen, dass Vorbereiten einmal die Verwendung

eines Filters, ein anderes mal die Suche nach

saube-ren Tassen umfasst Eine Maschine bzw ein

Compu-ter dagegen wäre zu einer derartigen InCompu-terpretation

nicht in der Lage und würde statt dessen bei jeder

Handlungsanweisung vorbereiten genau das tun,

was in der gleichnamigen Funktionsdefinition bzw

Handlungsdefinition steht Was für korrekten

Pro-grammcode gilt, sollte man sich daher auch für einen

Pseudo-Code merken: Wenn möglich, sind

verschie-dene Handlungsanweisungen auch mit verschieverschie-denen

Begriffen zu formulieren, was es in formaler Hinsicht

erleichtert, das spätere Skript fehlerfrei in der

richti-gen Syntax zu entwickeln Wir könnten hier die

ver-schiedenen Anweisungen des vorbereiten durch

ein Suffix genauer kennzeichnen, z B

vorberei-tenKaffee und vorbereitenServieren Dann

sähe unser Code so aus:

…Die drei Punkte (…) deuten Auslassungen an, um nicht permanent den gesamten Code wiederholen zu müssen Sie fügen an dieser Stelle gedanklich die be-reits oben dargestellten Zeilen ein

Damit können wir nun eigentlich genüsslich fee schlürfen Allerdings bleiben in unserem Al-gorithmus noch einige Fragen offen Ein typisches Problem stellen die Vorannahmen dar Dort haben wir vorausgesetzt, dass Wasser, Kaffeepulver und Strom vorhanden sind Doch was ist mit den für un-seren Prozess ebenso unverzichtbaren Filtern? Wir verwenden sie einfach in unserem Programm, ohne

Kaf-zu prüfen, ob überhaupt welche vorhanden sind Wir müssen daher unsere Funktion vorbereitenKaf- fee erweitern:

function vorbereitenKaffee(){

… Kanne in Maschine stellen

wenn(keine Filter vorhanden){

Filter kaufen gehen }

Filter in Maschine einsetzen Pulver in Filter füllen einschalten

}Auch an anderen Stellen greifen wir einfach auf Ob-jekte zu, ohne uns zu vergewissern, ob sie vorhanden sind Dasselbe gilt z B für Milch und Zucker Dem-entsprechend sollte die Funktion vorbereitenSer- vieren lauten:

function vorbereitenServieren(){

wenn (Tassen unsauber){

dann spülen }

Tassen nehmen

wenn (kein Zucker){

Zucker kaufen

Trang 34

20 Kapitel 3 Programmentwicklung und Programmiersprachen

}

Zucker nehmen

wenn (keine Milch){

kaufen (bei den derzeitigen Preisen

besser: Nachbarn fragen)

}

Milch nehmen

}

Damit erweitert sich unser Algorithmus um ein

wich-tiges Konzept, nämlich die Bedingung Anweisungen

wie das Kaufen von Zucker oder das Verwenden

ei-nes Filters werden von Voraussetzungen abhängig

gemacht, die explizit im Programm als Bedingung

formuliert werden

Es gibt noch weitere Stellen, an denen

Bedingun-gen erfüllt sein müssen, ehe der nächste Arbeitsschritt

ausgeführt werden kann Dabei können diese

Bedin-gungen beliebiger Art sein Oft kommt es vor, dass

zuerst ein bestimmter Arbeitsschritt beendet werden

muss, bevor der nächste Schritt folgen kann Das gilt

in unserem Beispiel hinsichtlich des Servierens, denn

selbstverständlich muss man erst einmal abwarten, bis

der Kaffee schon fertig aufgebrüht ist, ehe man sich

daran laben kann Den aktuellen Status kann man an

der Maschine ablesen, die uns beispielsweise durch

ein Lämpchen mitteilt, wann der Kaffee fertig ist

Mo-mentan ist es allerdings noch so, dass wir zunächst

den Anweisungs-Block kaffeeKochen und dann

unmittelbar danach den Block

fertigenKaffee-Servieren ausführen Tatsächlich muss jedoch die

zweite Anweisung von dem erfolgreichen Abschluss

der ersten abhängig gemacht werden

Daher korrigieren wir unseren Code:

Zum Schluss nach allen Funktionsdefinitionen lautet

der Aufruf nur noch:

kaffeeKochen()

Nun bleibt noch der Vorgang des Servierens, der falls von Bedingungen abhängt und in eine Funktion ausgelagert werden kann Ändern Sie daher den beste-henden Pseudo-Code in:

eben-function fertigenKaffeeServieren(){ vorbereitenServieren()

wenn (Gast will Milch){

Milch geben }

ausgeführt, die notwendig sind, bevor wir die schine einschalten können Dazu gehört etwa das Einstecken eines Filters, das Einfüllen von Pulver etc

Ma-aufbrühen

• Hier haben wir nicht etwa gemogelt, schließlich fehlt doch eigentlich eine entspre-chende Definition Das Aufbrühen ist ein maschi-neninterner Vorgang, der ausgelöst wird, sobald wir den betreffenden Befehl geben Es ist nicht notwendig, kleinschrittigere Anweisungen zu ge-ben Jede Script- und Programmiersprache verfügt über derartige vorgefertigte Funktionen (natürlich nicht zum Aufbrühen, sondern um anderweitige

Trang 35

Aktionen auszuführen) Sie stellen die

Grundbau-steine dar, aus denen der Programmierer seine

ei-genen, komplexeren Funktionen aufbaut

fertigenKaffeeServieren

legt fest, was geschehen soll, nachdem der Kaffee

fertig aufgebrüht wurde Sie besteht aus den zwei

Anweisungsblöcken vorbereitenServieren

und servieren

vorbereitenServieren

bedarf servieren (s u.) einiger vorbereitender

Schritte, die hier definiert werden

servieren

• Diese Funktion umfasst alle

Hand-griffe, die ausgeführt werden müssen, bis die schon

jetzt halb verdurstete Gästeschar endlich trinken

darf

Abschließend geben wir den Befehl

KaffeeKo-chen(), der die gesamte in den Funktionen

beschrie-bene Kette an Aktionen auslöst Bis zu diesem

Zeit-punkt hat einer der Gäste den Raum unter Protest in

unverständlichem Pseudo-Code verlassen, weil er

im-mer noch nichts zu trinken bekommen hat

Jeder passionierte Kaffeetrinker weiß, dass die

Menge des verwendeten Pulvers ebenso

entscheiden-den Einfluss auf entscheiden-den späteren Genuss ausübt wie die

Menge der Milch und gegebenenfalls des Zuckers

Ein noch so geringes Abweichen von der Idealmenge

vermag den Genießer in tiefste Depression zu

stür-zen Um ein solches Problem zu umgehen, empfiehlt

es sich, die Idealmenge irgendwo festzuhalten In der

Programmierung geschieht das mit Hilfe von

Varia-blen

Ganz am Anfang des Codes fügen wir ein:

mengeKaffee = 8 Löffel

Diese Information muss beim Einfüllen des Pulvers in

den Filter berücksichtigt werden:

function vorbereitenKaffee(){

Filter in Maschine einsetzen

mengeKaffee Pulver in Filter füllen

einschalten

}

Durch die Variable mengeKaffee haben wir exakt

festgelegt, wie viele Löffel wir zu verwenden

wün-schen Über die Funktion vorbereitenKaffee wird

nun nicht mehr eine beliebige Menge Pulver in den

Filter geschüttet, sondern genau so viel, wie in

besag-ter Variable festgehalten, in unserem konkreten Fall also 8 Löffel Auf die gleiche Art und Weise müssten alle anderen Mengenangaben präzisiert werden, also

z B Milch und Zucker

Für den Fall, dass Sie unterwegs verloren gen sind, hier der aktuelle Stand:

gegan-mengeKaffee = 8 Löffel function kaffeeKochen(){

vorbereitenKaffee() aufbrühen

wenn (Lämpchen brennt noch){

warten }sonst{

fertigenKaffeeServieren() }

} function vorbereitenKaffee (){

Kanne mit Wasser füllen Kanne fassen

Zum Wasserhahn gehen Unter Wasserhahn halten Wasser fließen lassen Wasser stoppen Kanne zur Maschine bringen Wasser in Maschine füllen Kanne in Maschine stellen wenn (keine Filter vorhanden){

Filter kaufen gehen }

Filter in Maschine einsetzen mengeKaffee Pulver in Filter füllen einschalten

} function fertigenKaffeeServieren(){ vorbereitenServieren()

servieren();

} function servieren(){

Kaffee in Tasse füllen wenn (Gast will Zucker){

Zucker geben

Trang 36

22 Kapitel 3 Programmentwicklung und Programmiersprachen

wenn (keine Milch){

kaufen (bei den derzeitigen Preisen

besser: Nachbarn fragen)

}

Milch nehmen

}

kaffeeKochen();

Wäre nun nicht die richtige Zeit, um einen Schluck

zu nehmen? Leider immer noch nicht – an dieser

Stelle mag der eine oder andere Leser unzufrieden

brummeln, denn jedermann dürfte klar sein, dass die

richtige Kaffeesorte von elementarer Bedeutung für

den „vollendeten Kaffeegenuß“ TM ist Was geschieht

jedoch, wenn jemand die verwendete Sorte

keines-falls goutieren möchte? In dem Fall bliebe zwar der

gesamte Prozess vom Ablauf her der gleiche, aber

eine Variable müsste mit einem anderen Inhalt belegt

werden In der Programmierung lässt sich das

Prob-lem z B mit Hilfe einer sogenannten parametrisierten

Funktion lösen, also einer Funktion, der wir beim

Auf-ruf eine Variable mit einem bestimmten Inhalt

mitge-ben Dazu muss zunächst in der Funktionsdefinition

festgelegt werden, dass wir eine derartige besondere

… }Wenn wir den Befehl zum Kaffee kochen an die Ma-schine ausgeben, teilen wir ihr gleichzeitig mit, wel-che Sorte denn gewünscht sei In unserem konkreten Fall übergeben wir leckeren „Segafredo Intermezzo“ Wenn wir beim nächsten Mal anderen Kaffee wün-schen, brauchen wir nur dementsprechend den Aufruf

zu ändern:

function kaffeeKochen(){

vorbereitenKaffee(„Pangalaktischer Donnergurgler Espresso“)

… }Obwohl uns bereits ein Gast verlassen hat, sind immer noch mehrere vorhanden Daher reicht es nicht aus, abschließend die Funktion servieren in der momen-tanen Form aufzurufen Denn die dort beschriebenen Arbeitsschritte müssen wir nicht nur einmal, sondern

so oft ausführen, wie durstige Gäste anzutreffen sind, schließlich soll ja jeder einen Kaffee erhalten Wie-derholt auszuführende Anweisungen werden in der Programmierung mit Hilfe von Schleifen definiert Ergänzen Sie dementsprechend die Definition von servieren:

wenn (Gast will Milch){

Milch geben }

}

}Auf diese Weise wiederholen wir für jeden einzelnen Gast das gesamte Prozedere des Verteilens unseres hoffentlich köstlichen Kaffees Halten sich noch 5

Trang 37

Gäste bei uns auf, führen wir die fraglichen

Anwei-sungen fünfmal aus, sind 2 da, eben nur zweimal

Wenn man Code auf diese Weise entwickelt, kommt

es vor, dass manche Information redundant und damit

überflüssig ist, und dass der Programmablauf noch

optimiert werden kann So verfügen wir mit

fer-tigenKaffeeServieren über eine Funktion, die

nichts anderes tut, als ihrerseits weitere Funktionen,

nämlich vorbereitenServieren und servieren

aufzurufen Wir können also auf

fertigenKaffee-Servieren verzichten und an deren Stelle direkt die

beiden genannten Funktionen verwenden

Die bis hierher entwickelte Form des benötigten gorithmus beschreibt bereits recht genau den Prozess, den wir programmiertechnisch abbilden wollen Er enthält zahlreiche grundlegende Elemente, die in je-dem Programm anzutreffen sind: Variable, Parameter, Aufruf bzw Anweisung, Anweisungs-Block, Schleife und Bedingung Die Abbildungen 3 bis 6 visualisieren sie in Kurzform, jeweils konkreten Elementen unseres Pseudo-Codes zugeordnet

Al-Welche Bedeutung die jeweiligen Elemente im Einzelnen besitzen, werden wir uns in den nachfol-genden Kapiteln noch genauer anschauen

Abbildung 3: Variablen- und

Funktionsdefinition

Trang 38

24 Kapitel 3 Programmentwicklung und Programmiersprachen

Abbildung 4: Anweisungsblock

Abbildung 5: Argument, meter, Schleife

Trang 39

Wasser in Maschine füllen Kanne in Maschine stellen wenn(keine Filter vorhanden){

Filter kaufen gehen }

Filter in Maschine einsetzen mengeKaffee Pulver welcheSorte in Filter füllen

einschalten }

function vorbereitenServieren(){

wenn (Tassen unsauber){

dann spülen }

Tassen nehmen wenn (kein Zucker){

Zucker kaufen }

Zucker nehmen wenn (keine Milch){

Unser gesamter Pseudo-Code sieht jetzt so aus:

Zum Wasserhahn gehen

Unter Wasserhahn halten

Wasser fließen lassen

Wasser stoppen

Kanne zur Maschine bringen

Abbildung 6: Anweisung, gung, Funktionsaufruf

Trang 40

Bedin-26 Kapitel 3 Programmentwicklung und Programmiersprachen

kaufen (bei den derzeitigen Preisen

besser: Nachbarn fragen)

Kaffee in Tasse füllen

wenn (Gast will Zucker){

Zucker geben

} wenn (Gast will Milch){

Milch geben }

} } kaffeeKochen();

Hätten Sie jemals gedacht, dass Kaffeekochen so pliziert und Programmieren so einfach sein könnte?

Ngày đăng: 15/03/2014, 02:20

TỪ KHÓA LIÊN QUAN

w