Objektorientierte Programmierung. Modul 24

Содержание

Слайд 2

Überblick

(Kurzerklärung) UI-Buttons
Funktionen
Variablen
Debugging
Datentypen
Simpel
Komplex
Unity-Documentation Research
(Funktionsparameter)

Überblick (Kurzerklärung) UI-Buttons Funktionen Variablen Debugging Datentypen Simpel Komplex Unity-Documentation Research (Funktionsparameter)

Слайд 3

OnClickEvent

Public class MyComponent()
{
public void MyFct1()
{
}
}

Button

OnClickEvent Public class MyComponent() { public void MyFct1() { } } Button

Слайд 4

Entgegennehmen von Interaktionen
Buttons

Button

Event

Nutzer

Component A

Funktion

Funktionsliste

Component B

Funktion

+

Button -> Funktion

Entgegennehmen von Interaktionen Buttons Button Event Nutzer Component A Funktion Funktionsliste Component

Слайд 5

OnClickEvent

Public class MyComponent()
{
public void MyFct1()
{
}
public void MyFct2( int parameter)
{

OnClickEvent Public class MyComponent() { public void MyFct1() { } public void

}
}

parameter

Button

Слайд 6

Berechnen, Entscheiden, Speichern, Laden
Darstellen, Abspielen, Verändern
Start durch System oder Nutzer
Können einander

Berechnen, Entscheiden, Speichern, Laden Darstellen, Abspielen, Verändern Start durch System oder Nutzer Können einander aufrufen Funktionen
aufrufen

Funktionen

Слайд 7

public class MyFirstClass: MonoBehaviour
{
public void MyFunction()
{
}
public void MyFunction2()
{
}
}

Funktionen

public class MyFirstClass: MonoBehaviour { public void MyFunction() { } public void

Слайд 8

MyFunction

void

public

{
Inhalt/ Befehle, jeweils mit Semikolon
}

( )

Protection
keyword

Rückgabewert
(void, wenn ohne Rückgabe)

Freiwählbarer Name
Eindeutig
Konvention: vorn Groß

Parameter
(

MyFunction void public { Inhalt/ Befehle, jeweils mit Semikolon } ( )
), wenn keine

KEIN SEMIKOLON!
Die Funktion wird beschrieben, aber nicht ausgeführt, kein Speicher vorbereitet ? Kein Befehl

;

Funktionsdefinition

Слайд 9

Klassen können mehrere Funktionen haben
Inhalt der Funktion durch geschweifte Klammern eingefasst
public, void

Klassen können mehrere Funktionen haben Inhalt der Funktion durch geschweifte Klammern eingefasst
und () einfach akzeptieren, dazu später mehr ( Sichtbarkeit, Rückgabewert, Parameter)

public class MyFirstClass: MonoBehaviour
{
public void MyFunction()
{
}
public void MyFunction2()
{
}
}

Funktionen

Слайд 10

Kleinste Funktionsbausteine
Verändern Variablen
Führen andere Funktionen aus

public void MyFunction()
{
MyFunction2();
}
public void MyFunction2()
{
Debug.Log( „Das ist

Kleinste Funktionsbausteine Verändern Variablen Führen andere Funktionen aus public void MyFunction() {
ein Test“ );
}

Befehle

Слайд 11

Serielle Abarbeitung
Immer in einer Funktion (außer Definitionen)
Immer mit SEMIKOLON beendet
Damit der Rechner

Serielle Abarbeitung Immer in einer Funktion (außer Definitionen) Immer mit SEMIKOLON beendet
das Ende erkennt

public void MyFunction() {DoStuff();MyFct3();Go( „Yeah“ ); }
public void MyFunction()
{
DoStuff();
MyFct3();
Go( „Yeah“ );
}

Befehle

Für den Rechner identisch

Слайд 12

public class MyFirstClass: MonoBehaviour
{
MyFunction( );
public void MyFunction()
{
MyFunction( )
}
public void MyFunction2()
{
MyFunction(

public class MyFirstClass: MonoBehaviour { MyFunction( ); public void MyFunction() { MyFunction(
);
}
MyFunction( )
}

Funktionen

1

2

3

4

Ausserhalb einer Funktion und keine Var.-Definition

Kein Semikolon

Läuft

Kein Semikolon
und siehe 1

Слайд 13

public class MyFirstClass: MonoBehaviour
{
public void MyFunction()
{
Debug.Log( „Das ist ein Test“ );
}
public void

public class MyFirstClass: MonoBehaviour { public void MyFunction() { Debug.Log( „Das ist
MyFunction2()
{
Debug.Log( „Now something completly different“ );
}
}

Man bräuchte eine einzelne Funktion für alles
Das ist Y = 5 nicht Y = 522 / X;
-> Variablen

Funktionen

Слайд 14

public class Charakter: MonoBehaviour
{
public void GreifeAn( Character target )
{
target.ErleideSchaden();
}
public void ErleideSchaden()
{
Debug.Log( „Autsch“

public class Charakter: MonoBehaviour { public void GreifeAn( Character target ) {
);
}
}

Funktionen

Kurzer Ausblick auf Variablen und Parameter

Слайд 15

meineVariable

string

public

Protection
keyword

Datentyp

Freiwählbarer Name
Eindeutig
Konvention: vorn klein

;

Semikolon!

SEMIKOLON!
Das Anlegen einer Variable reserviert Speicher
Ist für den Computer

meineVariable string public Protection keyword Datentyp Freiwählbarer Name Eindeutig Konvention: vorn klein
also ein Befehl

Variablen

Слайд 16

Datentypen

Simple und komplexe Datentypen
Simple sind Daten wie
Zeichen
Texte
Ganze Zahlen
Gebrochene Zahlen
Wahrheitswerte

Datentypen Simple und komplexe Datentypen Simple sind Daten wie Zeichen Texte Ganze Zahlen Gebrochene Zahlen Wahrheitswerte

Слайд 17

Datentypen

Größe des benötigten Speichers
Hilfe für die Zusammensetzung von rohen Daten
Erleichtert das

Datentypen Größe des benötigten Speichers Hilfe für die Zusammensetzung von rohen Daten
Verwenden von Funktionen, des jeweiligen Datentyps

Слайд 18

Können feste Werte im Code ersetzen
An ihre Stelle tritt dann ihr Inhalt Zu

Können feste Werte im Code ersetzen An ihre Stelle tritt dann ihr
DIESER Zeit im Programm -> dynamisch

public class MyFirstClass: MonoBehaviour
{
public string meinText;
public void MyFunction()
{
Debug.Log( „Das ist ein Test“ ); Debug.Log( meinText );
}
}

Variablen

Слайд 19

Können auch zur Laufzeit verändert werden

public string meinText;
public int y;
public int

Können auch zur Laufzeit verändert werden public string meinText; public int y;
x;
public void Function1()
{
Debug.Log(meinText);
meinText = „You are not prepared!“;
Debug.Log(meinText);
}
public void Function2()
{
y = 6584 * ( 543 / x );
y = y + y + x;
}

// Ausgabe: Was im Inspector stand
// Ausgabe: You are not prepared!

Variablen

Слайд 20

Concatinieren string + string string + „/“ + string string + variable
Rechnen
Probleme (Beispiel int /

Concatinieren string + string string + „/“ + string string + variable
int ? Keine float Zahl)

Variablen

Слайд 21

Variablen

Variablen können grob unterschieden werden
Klare Daten Texte, Zahlen, Bool, Vektoren (also auch komplexe

Variablen Variablen können grob unterschieden werden Klare Daten Texte, Zahlen, Bool, Vektoren
Datentypen)
Verknüpfungen zu Daten GameObjects, Komponenten, Assets

Component

Variable

„Das ist ein Test“

182643

true

Component

GameObject

Asset

Слайд 22

Einfache Daten-Zuweisung
Mittels „=„

Component

Funktion 1

Variable

public int dieAntwortAufDasLebenUndAlles;
public void Funktion1()
{
dieAntwortAufDasLebenUndAlles = 42;
}

Verknüpfung/Interne Änderung

Einfache Daten-Zuweisung Mittels „=„ Component Funktion 1 Variable public int dieAntwortAufDasLebenUndAlles; public

Слайд 23

Aufgabe 1 ? AddMultiplyScene
Button „Add“ : Addiert zwei Variablen und gebt das Ergebnis

Aufgabe 1 ? AddMultiplyScene Button „Add“ : Addiert zwei Variablen und gebt
in der Konsole aus.
Button „Multiply“ : Multipliziert dieselben Variablen und gebt das Ergebnis in der Konsole aus.

Debug.Log( „Meine Ausgabe“ );
Debug.Log( meineZahl.ToString() );

Hinweis: Konsolenausgabe

Слайд 24

Testen, Suchen und Fehlerbehebung
30 – 40% der Entwicklungszeit
Fehler sind Normalität!
Unterscheidung
„Syntax“-Fehler
Denkfehler
Implementationsfehler
Erfahrung ->

Testen, Suchen und Fehlerbehebung 30 – 40% der Entwicklungszeit Fehler sind Normalität!
Strategie zur Fehlerfindung

Debugging

Слайд 25

Error
Vom System erkannte Fehler beim Kompilieren (vor der Laufzeit)
Nicht ausführbare Befehle (zur

Error Vom System erkannte Fehler beim Kompilieren (vor der Laufzeit) Nicht ausführbare
Laufzeit)
Warnings
Hinweise auf unsauberen Code
Können bei Updates zu Fehlern werden
Logs
Vom Programmierer gesetzte Ausgabe/Hilfe

Debugging

Слайд 26

Console (in Unity!)

Toogle zum Anzeigen der 3 Log-Arten

Log-Text

1) Klasse, Funktion und Zeile des

Console (in Unity!) Toogle zum Anzeigen der 3 Log-Arten Log-Text 1) Klasse,
Befehl-Ursprungs

2) Nächste Station der Befehlskette

Слайд 27

Kommentare
Text im Code, der nicht ausgeführt wird
Dient der Erklärung
Realisiert durch „//“ vor

Kommentare Text im Code, der nicht ausgeführt wird Dient der Erklärung Realisiert
der Zeile
Häufig benutzt um Code-Zeilen zu deaktivieren

Debugging

public void DoSomethingAwesome()
{
// AwesomeStuff();
// Awesome didn‘t work…
DoSomethingNormal();
}

Слайд 28

Errors
Kompilierungsfehler verhindern das Ausführen/Starten des Programms

Console (in Unity!)

1) Pfad, (Klasse)

2) Fehlermeldung

3) Fehleranzahl/-Indikator

Errors Kompilierungsfehler verhindern das Ausführen/Starten des Programms Console (in Unity!) 1) Pfad,

Слайд 29

Interface Text

Ansprechen der Variable (Komponent)
. - Punkt!
Auswahl der gewünschten Variable

Component

Interface Text Ansprechen der Variable (Komponent) . - Punkt! Auswahl der gewünschten
A

Funktion 1

Text

public Text myInterfaceText;
public void Funktion1()
{
myInterfaceText . text = „Das ist ein Test“;
}

public class Text
{
public string text;
ZeigMalDenTextAn();
}

Verknüpfung/Externe Änderung

Слайд 30

Component B

Aufruf der Funktion (Komponent)
. - Punkt!
Auswahl der Funktion wie

Component B Aufruf der Funktion (Komponent) . - Punkt! Auswahl der Funktion
sonst

Component A

Funktion 1

public MyCoolComponent comp;
public void Funktion1()
{
comp. DoStuff();
}

public class MyCoolComponent
{
public void DoStuff()
{
}
}

Funktion anderer Objekte

Funktion 2

Слайд 31

Documentation Research

Suchen nach Funktion oder Variable einer Klasse
? Unity-Documentation
? Internet-Research, Foren
Beispiel: UnityEngine.UI.Text.text

Documentation Research Suchen nach Funktion oder Variable einer Klasse ? Unity-Documentation ? Internet-Research, Foren Beispiel: UnityEngine.UI.Text.text

Слайд 32

using UnityEngine;
using UnityEngine.UI;

Achtung: Interface namespace Oben hinzufügen

using UnityEngine; using UnityEngine.UI; Achtung: Interface namespace Oben hinzufügen

Слайд 33

Aufgabe 2.1 ? ProgressBarScene
Erhöhen einer int-Variable um Wert einer anderen int-Variable.
Ausgabe

Aufgabe 2.1 ? ProgressBarScene Erhöhen einer int-Variable um Wert einer anderen int-Variable.
im UI-Text ProgressText.

int myNumber = 826;
string hallo = myNumber.ToString( );

Hinweis: Zahl zu Text machen (int zu string überführen)

Слайд 34

Aufgabe 2.2 ? ProgressBarScene
Recherche zu „Image“ an Objekt ProgressBar
Variablen-Wert als Füllung der

Aufgabe 2.2 ? ProgressBarScene Recherche zu „Image“ an Objekt ProgressBar Variablen-Wert als
Grafik des Objekts ProgressBar darstellen
(Zusatzaufgaben für gesamte Stunde: Auf 100 begrenzen (ohne Bedingungen: if, switch,..)

Image progressBarGraphic;
progressBarGraphic.fillAmount = ??? ;

Слайд 35

public int element = 2;
public void MagicFct()
{
element = element + 10;
}

Button

MagicFct

Klassen/Funktionsvariablen

public int element = 2; public void MagicFct() { element = element

Слайд 36

Klasse

Funktion

public int speed; //Klassenvariable

int distance; //Funktionsvariable

Funktion

int distance; //Neue Funktionsvariable

public int intelligence; //Klassenvariable

public string name; //Klassenvariable

Klassen/Funktionsvariablen

Klasse Funktion public int speed; //Klassenvariable int distance; //Funktionsvariable Funktion int distance;

Слайд 37

void MyFunction()

class MyComponent

public int myGlobalNumber;

public int myNumber;
myGlobalNumber = 10;
myNumber = 55;

void MyFunction() class MyComponent public int myGlobalNumber; public int myNumber; myGlobalNumber =
void MyFunction2()

public int myNumber;
myGlobalNumber = 1000;
myNumber = myNumber + 30;

Werden auf derselben Ebene wie Funktionen definiert
Erscheinen im Inspector
Werden bis zum Szenenwechsel gespeichert

Werden innerhalb von Funktionen definiert
Erscheinen NICHT im Inspector
Werden nach der Funktion gelöscht

Funktionsvariablen

Klassenvariablen

Funktionsvariablen

Слайд 38

FunktionsVariablen

werden außerhalb von Funktionen definiert
Sie sind von allen Funktionen ansprechbar (intern

FunktionsVariablen werden außerhalb von Funktionen definiert Sie sind von allen Funktionen ansprechbar
und extern)
Sie werden mit der Instanz gespeichert

werden innerhalb einer Funktion definiert
Sie existieren nur innerhalb dieser Funktion
Inhalt/Speicher wird nach dem letzten Befehl wieder gelöscht

KlassenVariablen

Klassen/Funktionsvariablen

Слайд 39

void MyFunction()

class MyComponent

public int myGlobalNumber = 55;

public int myNumber = 100000;
public

void MyFunction() class MyComponent public int myGlobalNumber = 55; public int myNumber
string meinText = „BAM“ ;

Variablen können übrigens schon bei der Definition mit Daten gefüllt werden

Funktionsvariablen

Слайд 40

void SuperFunction()

class MyComponent

public int myGlobalNumber;

public int myNumber = 5;
myNumber = 1000;
myGlobalNumber

void SuperFunction() class MyComponent public int myGlobalNumber; public int myNumber = 5;
= myGlobalNumber + myNumber;

void AwesomeFunction()

public int myNumber;
myGlobalNumber = myGlobalNumber + myNumber;

myGlobalNumber = 20;
SuperFunction();
AwesomeFunction();
SuperFunction();

Funktionsvariablen

Wie groß ist „myGlobalNumber“ am Ende?

Слайд 41

Aktivieren/Deaktivieren von GameObjekten

Nutzen der Buttons „Reset“- und „Full“

Aktivieren/Deaktivieren von GameObjekten Nutzen der Buttons „Reset“- und „Full“

Слайд 42

Aufgabe 2.3 ? ProgressBarScene
Nutze die Buttons „Reset“- und „Full“-Button
Button „Reset“: Variablen-Wert zurücksetzen (0) und

Aufgabe 2.3 ? ProgressBarScene Nutze die Buttons „Reset“- und „Full“-Button Button „Reset“:
Darstellung anpassen.
Button „Voll“: Variablen-Wert auf 100 setzen und Darstellung anpassen.

Слайд 43

Klassen / Funktion – Variablen

public int element = 2;
public void Function1() {

Klassen / Funktion – Variablen public int element = 2; public void
int index = 10;
element = element + index;
Function2();
}
public void Function2() {
int index = 34;
element = element + index;
}
public void Function3() {
element = element + index;
}

Variablen

Слайд 44

public int ergebnis = 55;

Erlauben es, Daten als Funktionsvariablen in die Funktion

public int ergebnis = 55; Erlauben es, Daten als Funktionsvariablen in die
mitzugeben

void AddiereZuErgebnis( int myParameter )

ergebnis = ergebnis + myParameter ;

void MyFunction ( )

AddiereZuErgebnis( 526 );

Funktion: Parameter

Слайд 45

Funktionsvariablen, die von außen gesetzt werden
public class Debug
{
public void Log( string text

Funktionsvariablen, die von außen gesetzt werden public class Debug { public void
)
{
DisplayInConsole( text ) ;
}
}

Debug.Log( „Das ist ein Test“ );

Parameter

Слайд 46

Funktionsvariablen, die von außen gesetzt werden
Ermöglichen einer Funktion unendliche Probleme gleicher Art

Funktionsvariablen, die von außen gesetzt werden Ermöglichen einer Funktion unendliche Probleme gleicher
zu lösen
Verallgemeinern mehrerer Funktionen zu einer kann Fehler und Arbeitsaufwand verringern

public void ZumQuadrat( int parameter1 )
{
int quadrat = parameter1 * parameter1 ;
Debug.Log( quadrat );
}
public int zahl;
public void MyButtonFunction( )
{
ZumQuadrat ( zahl );
}

Parameter

Слайд 47

Funktionsvariablen, die von außen gesetzt werden
Ermöglichen einer Funktion unendliche Probleme gleicher Art

Funktionsvariablen, die von außen gesetzt werden Ermöglichen einer Funktion unendliche Probleme gleicher
zu lösen
Verallgemeinern mehrerer Funktionen zu einer kann Fehler und Arbeitsaufwand verringern

public void ZumQuadrat( int parameter1 )
{
int quadrat = parameter1 * parameter1 ;
Debug.Log( quadrat );
}
public int zahl;
public void MyButtonFunction( )
{
ZumQuadrat ( zahl );
}

Parameter

Слайд 48

Charakter

Leben

Greife an

Erleide Schaden

Char1

Leben

Greife an

Erleide Schaden

Char2

Leben

Greife an

Erleide Schaden

Char2

?

Charakter

?

Angriff

Angriff

Angriff

Charakter Leben Greife an Erleide Schaden Char1 Leben Greife an Erleide Schaden

Слайд 49

public int leben;
public int angriff;
public void GreifeAn( Character targetChar)
{
targetChar.ErleideSchaden( angriff );
}
public

public int leben; public int angriff; public void GreifeAn( Character targetChar) {
void ErleideSchaden( int schaden )
{
leben = leben – schaden;
}

Charakter

Leben

Greife an

Erleide Schaden

Charakter

?

Angriff

Objekt-Wechsel

Слайд 50

public int leben;
public int angriff;
public int level;
public void GreifeAn( Character targetChar )
{

public int leben; public int angriff; public int level; public void GreifeAn(
int schaden = (angriff * 4) * (level / 2);
targetChar.ErleideSchaden( schaden );
}

Charakter

Leben

Greife an

Erleide Schaden

Charakter

?

?

Angriff

Слайд 51

Aufgabe 2.4 ? ProgressBarScene
Nutzen von Parametern zur besseren Funktionsnutzung
Alle drei Buttons sollen am

Aufgabe 2.4 ? ProgressBarScene Nutzen von Parametern zur besseren Funktionsnutzung Alle drei
Ende dieselbe Funktion aufrufen, die dann den entsprechenden Parameter „in die Anzeige einträgt“

Button „Reset“

Button „Step“

Button „Full“

???

???

???

Display

Grafik/Text

Слайд 52

Datentypen sind generell definierte Klassen mit speziellen Funktionen.
Die häufigen/einfachen Datentypen wurden dabei

Datentypen sind generell definierte Klassen mit speziellen Funktionen. Die häufigen/einfachen Datentypen wurden
in den meisten höheren Prog.-Sprachen so vereinfacht, dass viel Schreibarbeit erspart bleibt.
Normalerweise müsste jede Variable folgenderweise definiert werden

Komplexe / Referenz-Datentypen

public void MyFct()
{
int myNumber = new int();
}

Erst das Schlüsselwort „new“ veranlasst den Computer Speicher für diese Variable zu reservieren

Слайд 53

Erfolgt dieser Aufruf nicht, gibt es zwar die Variable, aber sie hat

Erfolgt dieser Aufruf nicht, gibt es zwar die Variable, aber sie hat
keinen Wert. Dieser nicht vorhandene Wert wird als NULL beschrieben

NULL

public UnityEngine.UI.Text myText;
public void MyFct()
{
myText.text = „Hallo“;
// Ist im Inspector für „myText“ kein entsprechendes Objekt // zugewiesen, wird der Fehler „NullReference“ ausgegeben. // Eine Referenz zu etwas nicht vorhandenem
}