1e Deeltentamen nNagekeken werk ligt voor in de zaal (alfabetisch op achternaam) nNeem het even mee, de uitwerking wordt in het college besproken nDiscussies over de antwoorden: in de pauze nJe mag het werk behouden
1. Een klasse is… nEen groepje opdrachten nEen groepje variabelen nEen groepje methoden nEen groepje parameters ACBBAB BADDCA CBACBD DDCADC methode object 3% 0.5% 96% 0.5%
2. Een klasse is ook… nHet type van een object nHet type van een methode nHet type van een opdracht nHet type van een aanroep ACBBAB BADDCA CBACBD DDCADC opdrachten methoden klasse variabelen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken 81% 9% 3% 7%
3. Void wordt gebruikt in de header van een… nConstructormethode nMethode zonder parameters nMethode zonder body nMethode zonder resultaat ACBBAB BADDCA CBACBD DDCADC % 5% 3% 84%
4. Gebruik float i.p.v. double nNiet veel decimalen achter de punt nExtra veel decimalen achter de punt nGeen decimale punt nPrecieze financiële berekeningen ACBBAB BADDCA CBACBD DDCADC double int decimal 56% 32% 8% 3%
5. Matrix gebruik je voor… nRangschikken views in een raster nBeschrijven geometrische transformatie nBitmap decoderen nBitmap tekenen ACBBAB BADDCA CBACBD DDCADC Matrix mat = new Matrix(); mat.PostScale(schaalx, schaaly); mat.Rotate(hoek); Bitmap b = BitmapFactory.DecodeResource(x); canvas.DrawBitmap(b, 10, 20, verf); canvas.DrawBitmap(b, mat, verf); LinearLayout 11% 66% 7% 17%
6. Null pointer exception treedt op… nIn try-deel van try/catch(NullPtrExc) nIn catch-deel van try/catch(NullPtrExc) nBij gebruik van een variabele uit object zonder waarde nBij gebruik van niet-gedeclareerd object ACBBAB BADDCA CBACBD DDCADC % 32% 42% 9%
7. Radio-buttons heten zo omdat… nVorm lijkt op volume/afstem-knoppen nGedrag lijkt op bandselectie-knoppen nGroepering lijkt op afstem-veld nVorm lijkt op kattenoog …van vroegere radio’s ACBBAB BADDCA CBACBD DDCADC % 60% 13% 5%
8. new Color(255, 128, 0) nLichtblauw nRoze nDonkergroen nOranje ACBBAB BADDCA CBACBD DDCADC rood groenblauw (255,0,0) (0,255,0) (255,255,0) (0,0,255) (0,255,255) (255,0,255) (255,255,255) (0,0,0) new Color(255, 0, 0) new Color(255, 64, 0) new Color(255, 128, 0) new Color(255, 192, 0) new Color(255, 255, 0) 3% 19% 15% 63%
9. Aan het eind van … roep je Invalidate aan: neen eventhandler omdat variabelen buiten de methode zijn veranderd nOnDraw omdat plaatje opnieuw getekend moet worden neen overriden methode omdat oorspronkelijke methode is veranderd nconstructor van subklasse van View omdat oorspronkelijke object is veranderd ACBBAB BADDCA CBACBD DDCADC % 28% 8% 11%
10. Wat is 45 % 10 n4 n5 n0.5 n40.5 ACBBAB BADDCA CBACBD DDCADC % 81% 2% 6%
11. Waar staan declaraties? namespace N { class K : S { void M( ) { } int x; int x in de body van een klasse in de header van een methode in de body van een methode in de header van een klasse buiten de klasse te gebruiken in alle methoden om parameters te ontvangen voor tijdelijke tussenresultaten
12. Interface In libraries worden naast klassen ook interfaces gedefinieerd nWat is er anders dan in een klasse? nWaar gebruik je de interface-naam? nWelke verplichting brengt dat met zich mee?
Interface nIn de library nIn je eigen programma interface ISensorEventListener { } public void OnSensorChanged(SensorEvent s); class KompasView : View { } public KompasView(Context c) : base(c) { } public OnDraw(Canvas c) { } public void OnSensorChanged(SensorEvent s) { }, ISensorEventListener wat is er nodig om een ISensorEventListener te zijn? deze methode! ik beloof een ISensorEventListener te zijn en implementeer dus de methode! public void OnAccuracyChanged(SensorEvent s);
Kompas } { protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } public KompasView(Context c) : base(c) { b = BitmapFactory.DecodeResource (...UU...); } class KompasView : View public void OnSensorChanged(SensorEvent s) { } Bitmap b;float Schaal;float Hoek;, ISensorEventListener canv.DrawBitmap(b, mat, verf); Schaal = this.Width / b.Width; Matrix mat = new Matrix(); mat.PostScale(Schaal, Schaal); mat.PostRotate(- Hoek); mat.PostTranslate(Width/2, Height/2); mat.PostTranslate(-b.Width/2, -b.Height/2); Hoek = s.Values[0]; this.Invalidate( ); SensorManager sm = c. GetSystemService(...); sm.RegisterListener(this,...Orientation... ); is een geldige ISensorEventListener want zijn klasse heeft deze methode belooft methodes
12. Interface In libraries worden naast klassen ook interfaces gedefinieerd nWat is er anders dan in een klasse? alleen methode-headers, zonder bodies nWaar gebruik je de interface-naam? aan het eind van de header van je klasse nWelke verplichting brengt dat met zich mee? om de gespecificeerde methodes inderdaad te definiëren
"/\" x++2 override DateTime string this.new false&&true DateTime nu; return null; bool b=true; DateTime. Now Hallo(Color c) new Button (this) override void a() foreach (A b in c) ; wit.Color = Color.White; Type / Expr / Opdr / Decl / Head / X Methode T E O E D T E OD H X X X X X TO D H O E H
"/\" x++2 override DateTime string this.new false&&true DateTime nu; return null; bool b=true; DateTime. Now Hallo(Color c) new Button (this) override void a() foreach (A b in c) ; wit.Color = Color.White; T E O E D X X X X TO D H O E H goed aantal cijfer
Opgave 14: Kopieer & Druiven o-o-o-o-o.o-o-o-o...o-o-o.....o-o o....
Opgave 14: Kopieer public string Kopieer } return res; public string Druiven (int n) } & Druiven string res = ""; res = res + x; int t; for (t=0; t<n; t++) { return res; string res = ""; for (int t=0; t<n; t++) { } res += regel + "\n"; regel = pt + os + "o" + pt; pt = Kopieer(t, "."); os = Kopieer(n-1-t, "o-"); string pt, os, regel; o-o-o-o-o.o-o-o-o...o-o-o.....o-o o.... o-o-o-o-o.o-o-o-o...o-o-o.....o-o o.... { (int n, string x)
14c: AndroidApp override void OnCreate(Bundle b) { class DruivenApp { SeekBar b; TextView t; void schuif (obj o, EA ea) { } } } int r = b.Progress; base.OnCreate(b); b = new SeekBar(this); t = new TextView(this); LinearLayout stapel = new LinearLayout(this); stapel.AddView(b); stapel.AddView(t); SetContentView(stapel); b.ProgressChanged += schuif; string s = this.Druiven(r); t.Text = s; b.Max = 10; : Activity t.Text = this.Druiven(b.Progress);
Practicum opgave 2: Running App v.2 3 extra knoppen toevoegen: nSharen van data nScherm voor analyse van track nOpslaan van tracks in een database
Cirkel- klikker } { protected override void OnDraw(Canvas c) { base.OnDraw(c); } public MijnView(Context c) : base(c) { this.Touch += raakAan; } class MijnView : View public void raakAan(object o, TouchEventArgs tea) { } } c.DrawCircle(p.X, p.Y, 50, new Paint()); x = tea.Event.GetX(); y = tea.Event.GetY(); this.Invalidate(); float x, y; PointF p; p = new PointF(x, y); if (p != null)
Cirkel- klikker } { protected override void OnDraw(Canvas c) { base.OnDraw(c); } public MijnView(Context c) : base(c) { this.Touch += raakAan; } class MijnView : View public void raakAan(object o, TouchEventArgs tea) { } } c.DrawBitmap(b, p.X, p.Y, new Paint()); x = tea.Event.GetX(); y = tea.Event.GetY(); this.Invalidate(); float x, y; PointF p; p = new PointF(x, y); if (p != null) met bitmap b = BitmapFactory.DecodeResource (...Icon...); Bitmap b;
Punten- klikker } { protected override void OnDraw(Canvas c) { base.OnDraw(c); } public MijnView(Context c) : base(c) { this.Touch += raakAan; } class MijnView : View public void raakAan(object o, TouchEventArgs tea) { } } c.DrawBitmap(b, p.X, p.Y, new Paint()); x = tea.Event.GetX(); y = tea.Event.GetY(); this.Invalidate(); float x, y; PointF p; p = new PointF(x, y); foreach( PointF p in alles) met bitmap b = BitmapFactory.DecodeResource (...Icon...); Bitmap b; List alles = new List ( ) ; alles.Add(p);
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken
Een eigen klasse om variabelen te groeperen nVoorbeeld: een Kleur bestaat uit Rood, Groen, Blauw { class Kleur } byte Rood; byte Groen; byte Blauw; public Kleur paars; paars = new Kleur(); paars.Rood = 128; paars.Blauw = 128; paars.Groen = 0; int x = paars.Grijswaarde();
Eigen klasse Kleur { class Kleur } public byte Rood, Groen, Blauw; public Kleur( ) { } Rood=255; Groen=255; Blauw=255; constructor-methode public Kleur( byte r, byte g, byte b ) { } Rood=r; Groen=g; Blauw=b; constructor-methode met parameters public Kleur( byte x) { } Rood=x; Groen=x; Blauw=x; nog een constructor-methode public byte Grijswaarde( ) { } return (3*Rood + 6*Groen + Blauw) / 10; methode die iets uitrekent
Gebruik van klasse Kleur Kleur wit, paars, oranje, lichtgrijs, donkergrijs; wit = new Kleur( ); paars = new Kleur( 128, 0, 128 ); oranje = new Kleur( 255, 128, 0 ); lichtgrijs = new Kleur( 180 ); donkergrijs = new Kleur( 60 ); byte x = oranje.Grijswaarde( ); Kleur oranjeInZwartwit; oranjeInZwartwit = new Kleur(x); oranje.MaakDonkerder( ); aanroep van een constructor-methode aanroep van een methode met een resultaat aanroep van een void-methode
Methodes in de eigen klasse Kleur { class Kleur } public byte Rood, Groen, Blauw; return (3*Rood + 6*Groen + Blauw) / 10; methode die iets uitrekent void-methode die het object verandert Rood = Rood * 0.9; Groen = Groen * 0.9; Blauw = Blauw * 0.9; Rood = (byte) (Rood * 0.9) ; Groen = (byte) (Groen * 0.9) ; Blauw = (byte) (Blauw * 0.9) ; de variabelen van public string ToString( ) { } return $"{Rood} {Groen} {Blauw}"; override : object methode die een leesbare versie van de Kleur maakt elke klasse is automatisch subklasse van object (byte) (0.3*Rood + 0.6*Groen + 0.1*Blauw); public byte Grijswaarde( ) { } public void MaakDonkerder( ) { }
Gebruik van klasse Kleur Kleur oranje = new Kleur( 255, 128, 0); oranje.MaakDonkerder( ); aanroep van een void-methode string s = oranje.ToString( ); class MijnApp : Application { TextField tf; void OnCreate(Bundle b) { base.OnCreate(b); tf = new TextField(this); tf.Text = s; aanroep van een methode met een resultaat
Gebruik van klasse Kleur Kleur oranje = new Kleur( 255, 128, 0); oranje.MaakDonkerder( ); aanroep van een void-methode string s = oranje.ToString( ); class MijnView : View { void OnDraw(Canvas c) { Paint verf = new Paint( ); c.DrawText( s, 10, 10, verf); aanroep van een methode met een resultaat
Meer constructormethodes in klasse Kleur { class Kleur } public byte Rood, Groen, Blauw; public Kleur( byte r, byte g, byte b ) { } Rood=r; Groen=g; Blauw=b; constructor-methode met parameters public Kleur( Kleur orig ) { } Rood=orig.Rood; Groen=orig.Groen; Blauw=orig.Blauw; constructor-methode die een kopie maakt public Kleur( string s ) { } constructor-methode die een string ontleedt string[ ] woorden = s.Split( ); Rood = woorden[0]; Groen = woorden[1]; Blauw = woorden[2]; Rood = byte.Parse( woorden[0] ); Groen = byte.Parse( woorden[1] ); Blauw = byte.Parse( woorden[2] ); array van strings handige methode van string
Zelf arrays maken string[ ] woorden = s.Split( ); string[ ] dagen = { "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag", "zondag" }; int[ ] maandlengtes = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; Kleur[ ] palet = { new Kleur(255,0,0), new Kleur(), new Kleur(0,0,255), oranje }; foreach ( string dag in dagen ) { } canvas.DrawText ( dag, 10, y, verf ); y = y+50;
Intent nIntent: bedoeling om een nieuwe activiteit te starten ueigen activiteit §Hallo §Teller ustandard §web-browser §text-sender
Multi public class Multi : Activity { protected override void OnCreate(Bundle b) { base.OnCreate(b); } b1 = new Button(this); b2 = new Button(this); } Button b1, b2, b3, b4, b5, b6; b1.Text = "Hallo"; b2.Text = "Teller"; b1.Click += klik1; b2.Click += klik2; LinearLayout lay = new LinearLayout(this); lay.AddView(b1); lay.AddView(b2); SetContentView(lay); public void klik1(object o, EventArgs e) { }
Intent: Hallo opstarten public class Multi : Activity { } Button b1, b2, b3, b4, b5, b6; public void klik1 (object o, EventArgs e) { } Intent i; i = new Intent (this, StartActivity(i); typeof(Hallo) ); i.PutExtra("wat", "Hallo!!!"); public class Hallo : Activity { } override void OnCreate(Bundle b) { base.OnCreate(b); } TextView t = new TextView(this); SetContentView(t); string s = Intent.GetStringExtra("wat"); t.Text = s; hier zijn 24 verschillende varianten van......maar net niet die je nodig hebt, bijv. Kleur i.PutExtra("kleur", oranje.ToString()); string s = Intent.GetStringExtra("kleur"); Kleur k = new Kleur(s);
Practicum opgave 2: Running App v.2 3 extra knoppen toevoegen: nSharen van data nScherm voor analyse van track nOpslaan van tracks in een database