Samenvatting Mobiel Programmeren

download Samenvatting Mobiel Programmeren

of 30

Transcript of Samenvatting Mobiel Programmeren

  • 8/18/2019 Samenvatting Mobiel Programmeren

    1/30

    SAMENVATTING MEAUPREAU Met een fancy layout

    JANUARY 28, 2016

    (JA, EEN DAG VOOR HET TENTAMEN)Yvonne van der Wal

  • 8/18/2019 Samenvatting Mobiel Programmeren

    2/30

    SDI: SuperDynamische InhoudsopgaveH1. Mobiel Programmeren ...................................................................................................................... 3

    1.1 Computers en programma’s .......................................................................................................... 3

    1.2 Orde in de Chaos ........................................................................................................................... 3

    1.3 Programmeerparadigma’s ............................................................................................................. 4

    1.4 Programmeertalen ........................................................................................................................ 4

    1.5 Vertalen van programma’s ............................................................................................................ 4

    1.6 Programmeren .............................................................................................................................. 4

    1.7 Mobiel Programmeren .................................................................................................................. 4

    H2. Hallo, app! ......................................................................................................................................... 5

    2.1 Soorten programma’s .................................................................................................................... 5

    2.2 Opbouw van een C# programma .................................................................................................. 52.3 Opbouw van een Android-programma ......................................................................................... 5

    2.4 Syntax diagrammen ....................................................................................................................... 6

    2.5 Methodes ...................................................................................................................................... 6

    2.6 Een Layout met meerdere views. .................................................................................................. 6

    H3. En.. aktie! .......................................................................................................................................... 7

    3.1 Klikken op buttons ......................................................................................................................... 7

    3.2 Een kleurenmixer........................................................................................................................... 7

    H4. Methoden om te tekenen ................................................................................................................. 9

    4.1 Een eigen subklasse van View ....................................................................................................... 9

    4.2 Variabelen : Declareren, Toekennen, Gebruiken .......................................................................... 9

    4.3 Berekeningen (expressies) .......................................................................................................... 10

    4.4 Programma-layout....................................................................................................................... 11

    4.5 Declaraties en initialisatie ........................................................................................................... 11

    4.6 Methode-definities ...................................................................................................................... 11

    4.7 Op zoek naar parameters ............................................................................................................ 12

    H5. Objecten en methoden ................................................................................................................... 13

    5.1 Variabelen ................................................................................................................................... 13

    5.2 Objecten ...................................................................................................................................... 13

    5.4 Typering ....................................................................................................................................... 14

    5.5 Constanten (leeg) ........................................................................................................................ 15

    5.6 Static properties .......................................................................................................................... 15

    H6. Touch & go ...................................................................................................................................... 15

    6.1 Touch ........................................................................................................................................... 156.2 Lijsten .......................................................................................................................................... 16

  • 8/18/2019 Samenvatting Mobiel Programmeren

    3/30

  • 8/18/2019 Samenvatting Mobiel Programmeren

    4/30

    H1. Mobiel Programmeren1.1 Computers en programma ’sOpdracht: het voorschrift om het geheugen te veranderen.

    Operating system: zet het programma in het geheugen voordat het wordt uitgevoerd. Als dit nietgedaan wordt door het operating system, maar het wel wordt geïnstalleerd, dan heb je een virus .

    Programma: lange reeks opdrachten die –als ze door de processor worden uitgevoerd – het doelhebben het geheugen te veranderen.

    Programmeertaal: een verzameling notatie-afspraken.

    1.2 Orde in de Chaos

    Het geheuden is voor programma’s aanspreekbaar in de vorm van variabelen .

    Variabele : een plaats in het geheugen met een naam.

    Object : groepje variabelen.

    Object -georiënteerde programmeertalen: Objecten kunnen worden gedefinieerd als variabelen, dieop hun beurt weer objecten kunnen worden.

    Methode : groepje obdrachten met een naam, die vervolgens weer aangeroepen kan worden omvariabelen te veranderen.

    Klasse : een groepje methoden met een naam. Hier kunnen meer members dan alleen methodes inzitten.

    Namespace: Groepje klassen met een naam (er kunnen ook andere members in een namespacezitten)

  • 8/18/2019 Samenvatting Mobiel Programmeren

    5/30

    1.3 Programmeerparadigma’s Imperatief programmeren: talen die gebaseerd zijn op opdrachten om het geheugen te veranderen.Imperatieve talen sluiten dus direct aan op het besproken computermodel met processor ergeheugen.

    Declaratief programmeren: Functioneel: het ‘programma’ is niet op het ge ven van opdrachten gebaseerd, maar op het leggenvan verbanden tussen de diverse ccellen (Excel).

    Declaratief : talen die op de propositielogica zijn gebaseerd.

    Procedureel: Imperatief + methoden. Hierin spelen procedures (methoden) een belangrijke rol.Omdat er opdrachten in worden gebruikt zijn ze imperatief.

    Object-georiënteerd: procedureel + objecten . Niet alleen opdrachten bundelen in methoden, maarook variabelen bundelen in objecten.

    1.4 ProgrammeertalenZoals weergegeven in chronologische volgorde:

    Assembler-talen : processor instrueerde de computer direct, door instructies in getalvorm inhet geheugen neer te zetten. Hierdoor processorspecifiek.

    Fortran : Formula Translator. Met een speciaal programma mogelijk om opdrachten tevertalen naar diverse processoren.

    Basic: Gebruiksvriendelijker. Werd standaardtaal van personal computers. Helaas nietgestandardiseerd, waardoor ieder merk computer een ander dialect gebruikte.

    Procedurele talen: Pascal, C, PHP, Algol, Python. Uitwisselbaar. Algolg werd te complex. C

    gebruikt om Unix te schrijven. Object-georiënteerde talen: Simula, Smalltalk, C++. Zelfstandige eenheden konden als object

    worden beschreven, wat goed was voor simulaties. C++ zorgde voor een combinatie tussenProcedureel en object-georiënteerd (niet alles hoefde gedefinieerd te worden als object).

    Java: is sterk getypeerd : de programmeur legt het type van variabelen vast en moet hen danook op die manier behandelen. Opdracht wordt uitgevoerd met een virtual machine , diecheckt of het klopt.

    C#: gebruikt ook een virtual machine (managed code genoemd).

    1.5 Vertalen van programma’s Compiler: vertaalprogramma.

    Interpreter: Pogramma dat de broncode leest, opdrachten vervolgens uitvoert zonder ze eerst tevertalen naar een machinecode. Voordeel: geen aparte vertaalslag nodig.

    Compiler + interpreter: Java gebruikt een compiler die de broncode vertaalt naar een tussenliggendetaal ( bytecode ). Hierdoor kunnen mensen niet het programma jatten. Gaat ook snel.

    Compiler + compiler: C# vertaalt ook naar een tussenliggende taal, maar met een compiler ( jitter ).

    1.6 ProgrammerenJa, hoi. Ik neem aan dat je zelf ook wel weet wat dit is.

    1.7 Mobiel ProgrammerenTelefoons worden steeds belangrijker, meerdere talen voor meerdere telefoons, we leren het in C#.

  • 8/18/2019 Samenvatting Mobiel Programmeren

    6/30

    H2. Hallo, app!2.1 Soorten programma’s Bij de ontwikkeling van een programma moet je besluiten wat voor soort programma je maakt.Veelgebruikt zijn:

    Console-applicatie : Alleen een simpe tekstscherm, en meestal kan de gebruiker iets intikken.Vraag-antwoord dialoog

    Windows -applicatie: Een grafisch scherm met meerdere windows en GUI. Game : Ook grafisch scherm met GUI, snel veranderend beeld. Web -applicatie: Alleen in het begin iets van input voor gebruiker, daarna veel veranderende

    scherme. Applet : kleine applicatie binnen de context van een webbrowser, maar nu uitgevoerd op de client

    (computer vna gebruiker) en niet op de server. Mobiele applicatie (of app) : Applicatie die wordt uitgevoerd op je mobieltje. Beperkte

    schermruimte, gebuiker kan dingen aanwijzen maar weinig tekstinvoer doen. Snesoren voor GPSen zo.

    2.2 Opbouw van een C# programmaHet is verplicht opdrachten te bundelen in een methode.

    Declaraties: namen van variabelen worden geïntroduceerd.

    Attribuut: [activi tyAttribute(Label = “Hello” , MainLauncher = true)]

    Compilatie-eenheid: Groepje klassen in een file.

    Libraries: using..

    Toekenningsopdracht: een nieuwe waarde geven aan een variabele ( met = ).

    Methode-aanroep: een variabele veranderen met een methode (scherm.Color = Color.Red).

    2.3 Opbouw van een Android-programma Activity: Wat een app doet.

    Als je public class HalloApp : Activity doet, betekent dit dat de klasse HalloApp een subklasse is van Activity.

    Syntax van een opdracht:

  • 8/18/2019 Samenvatting Mobiel Programmeren

    7/30

  • 8/18/2019 Samenvatting Mobiel Programmeren

    8/30

    H3. En.. aktie!3.1 Klikken op buttonsEvent: een gebeurtenis, vaak veroorzaakt door de gebruiker. Een eventhandler specificeert de reactieop deze gebeurtenis.

    Als je een EventHandler wilt gebruiken moet je hem eerst registreren. Dit is in eenmalig en gebeurtdaarom vaak in de OnCreate. Dit gebeurt met de opdracht knop.Click += this.klik. We doen += omdater meerdere EventHandlers voor hetzelfde event geregistreerd kunnen worden (hoewelongebruikelijk). Een Event-handler methode heeft twee paramters:

    Eventargs: Nadere info om evt op te vragen, maar bij button alleen belangrijk dat hij is ingedrukt. Object: Welk object de veroorzaker is van het event (hier maar één button dus de button)

    Membervariabele : gedeclareerd in de klasse. Dit, omdat je ze gebruikt in zowel de OnCreate als deeventhandler. Omdat zij in de klasse zijn gedefinieerd maken zij deel uit van het permanente

    geheugen.

    Declareren in de methode: Alleen wanneer een variabele puur in de methode wordt gebruikt.Integer: getal zonder komma en decimalen.Functie home-knop: app wordt tijdelijk gepauzeerd.Functie back-knop: app wordt definitief afgesloten.

    3.2 Een kleurenmixerSeekBar : schuifregelaar. Heeft de eigenschap Progress , waarmee de positie van het schuivertje kanworden vastgelegd of opgevraagd. Met ProgressChanged kun je een EventHandler registreren.

    MatchParent : Hiermee zorg je dat de breedte meegroeit met de totale beschikbare ruimte.Random : Hiermee genereer je een nieuw random getal. Schrijfwijze:Random genereer;genereer = new Random();genereer.Next(); wanneer je een nieuw random getal wilt.

    Hexadecimaal: 123456789ABCDEF. Hierbij F=16. Dus 1F= 16(één keer loop) + 15(tot de F) = 31. FF =255, en dat is het maximale getal in hexadecimaal. Programmeurs beginnen op 0, dus 0-255 is 256mogelijkheden.

    Hexadecimale (kleuren)getallen begin je altijd met 0x.Bit: kleinste eenheid in het computergeheugen. 0 of 1. Met twee bits kun je 4 combinaties maken:11,00,10,01. Dit gaat exponentieel door. Dus 3 bits = 2^3 = 8 mogelijkheden.Byte : groep van 8 bits (2^8 = 256 mogelijkheden). Dit wordt genoteerd in hexadecimaal (dus 00 toFF). Is makkelijker.

    Oude string-formatting: knop.Text = “R= “ + r.Tostring ;

    Nieuwe string-formatting: knop.Text = $”R= {r}”; Dit heet een geïnterpoleerde string omdat deletterlijke teksten en expressies door elkaar heen staan.

    Dus, om een string met hexadecimale getallen te maken:

  • 8/18/2019 Samenvatting Mobiel Programmeren

    9/30

    Knop.Text = “RGB= {r: X2} { g: X2} {b: X2}”;En, samen in een geheel:knop.Text = $”R= {r } G={g} B={b} RGB= {r: X2} { g: X2} {b: X2} \nmix een kleur”;

  • 8/18/2019 Samenvatting Mobiel Programmeren

    10/30

    H4. Methoden om te tekenen4.1 Een eigen subklasse van ViewDe methode OnDraw wordt automatisch aangeroepen op het moment dat de view getekend moetworden. Hij moet dus worden overreden. Hierdoor wordt de methode OnDraw:

    Protected override void OnDraw(Canvas canvas){ Base.OnDraw(canvas);

    Canvas : iets om op te tekenen.

    Methoden die je met Canvas kunt aanroepen:

    DrawLine: tekent een lijn (x1, y1, x2, y2, verf) DrawRect: tekent een vierkant (links, boven, rechts, onder, verf) (dus q.X,q.y,R.x,R.y,verf) DrawCircle: tekent een cirkel (x, y, radius, verf) DrawOval: tekent een ovaal (links, boven, rechts, onder, verf) DrawText: tekent een tekst op aangegeven plek (tekst, x, y, verf) DrawColor(kleur): kleurt het hele canvas DrawBitmap: tekent een plaatje (bitmap, x, y, verf)

    Alle methoden uit de klasse Canvas kun je aanroepe, als je de beschikking hebt over een object methet object-type Canvas. Dus staat dus in de header van de methode, waardoor we de Canvas-methoden kunnen gebruiken in onze methode.

    Constructormethode: Tijdens het aanmaken van een nieuw object met new wordt er een specialemethode aangeroepen. Deze heeft dezelfde naar als het type van het nieuwe object. Schrijfwijze:

    Public MondriaanView(Context c) : base(c)

    Geen void , want het type is een MondriaanView. Ook geen override omdat hij niet al automatischwordt aangeroepen. Een View heeft een Context nodig; die roepen wij daarom ook aan. Deconstructormethode wordt aangeroepen vanuit de methode OnCreate :

    MondriaanView schilderij;Schilderij = new MondriaanView(this);

    Je ziet hier dat this , het object van de MondriaanApp, zich blijkbaar kan gedragen als een Context. Ditkunnen alle subklassen van View (TextView, LinearLayout, Button..).

    4.2 Variabelen : Declareren, Toekennen, GebruikenHet verschil tussen variabelen en parameters:

    Variabelen worden gedeclareerd in de body van de methode; parameters worden gedeclareerdtussen de haakjes in de methode-header. Body versus header

    Variabelen krijgen een waarde door de toekenningsopdracht, parameters krijgen automatischeen waarde bij de aanroep van de methode. Variabelen waarde toekennen

    In een variabele-declaratie kun je meerdere variabelen tegelijk declareren en het type maar éénkeer opschrijven; in parameter-declaraties moet je bij iedere parameter opnieuw het type

    opschrijven (ook als dit hetzelfde is). Meerdere v tegelijk 1x decl, p iedere keer type opschrijven Variabele-declaraties eindigen met een puntkomma, parameter-declaraties niet. V moet ;

  • 8/18/2019 Samenvatting Mobiel Programmeren

    11/30

    Int-typen:

    Float: wel cijfers achter de komma Char: lettertekens Bool : waarheidswaarden

    Declaraties zijn nuttig om meerdere redenen:

    De compiler weet door declaraties wat het type van de variabele is; hierdoor kan dezecontroleren of de methode-aanroepen wel zinvol zijn

    De compiler kan bij aanroep van methoden controleren of de parameters van het juiste type zijn Als je een tikfout maakt komt dit aan het licht omdat de compiler de variabele niet ‘kent’

    4.3 Berekeningen (expressies)Expressie: een “uitdrukking” waarvan de waarde kan worden bepaald. Kunnen van ieder type zijn. Operatoren bij int-expressies:

    + optellen - aftrekken * vermenigvuldigen / delen % bepalen van de rest bij deling (modulo) (14/3 = 4, 14%3 = 2 (want 3*4 =12 en 14-12=2))

    Voorbeelden van expressies:

    List.Length() is ook een expressie, omdat je de waarde kunt bepalen.

    5 + 3 F.Text “Hallo “ +naam Color(100,150,200) Een losse variabele

    Hieronder volgt de syntax van een expressie.

  • 8/18/2019 Samenvatting Mobiel Programmeren

    12/30

    Verschil tussen een expressie en een opdracht: een opdracht kun je uitvoeren.Expressies kunnen deel uitmaken van een opdracht:

    Blauw = Color.Blue(); Er staat een expressie rechts van het =-teken in een toekenningsopdracht; View ( Canvas c ) Er staan expressies tussen de haakjes van een methode-aanroep;

    Hoi .Text(); Er staat een expressie voor de punt van een (niet-statische_ methode-aanroep en eenproperty-bepaling.

    Wanneer een methode Void is, heeft het geen waarde en is het dus geen expressie. ToString() is vanhet type string, dus dat is wel een expressie. SetContentView is een void, dus dat is geen expressie.

    Void-methodes moeten dus altijd als opdracht worden aangeroepen. Alle andere methoden wordenmeestal als expressie aangeroepen. Als je wilt kun je ze toch als opdracht aanroepen; de waarde vande methode wordt dan genegeerd.

    4.4 Programma-layout

    Fiks je commentaar en haal weggecommentarieerde meuk uit je programma.

    Regels kun je af en toe overslaan; tussen verschillende methoden en tussen groepjes opdracht (enhet bijbehorende commentaar) die bij elkaar horen.

    Witruimte is mooi, :

    Achter elke komma en puntkomma (maar niet ervoor) Links en rechts van het =-teken in een toekenningsopdracht Aan het begin van regels, zodat de body van methoden en klassen wordt ingesprongen ten

    opzichte van de accolades die de body begrenzen

    4.5 Declaraties en initialisatieIn plaats van:

    Int breedte;Breedte = 5;

    Kun je ook doen:

    Int breedte – 5;

    Dit mag natuurlijk alleen bij de eerste toekenning, anders declareer je de variabele opnieuw en danvliegt alles in de hens.

    Initialisatie: eerste toekenning van een variabele.

    Const: kun je bij de initialisatie aangeven wanneer je wilt dat een variabele nooit verandert.Schrijfwijze is dan const int hoi = 5;

    Var: Het type van de variabele wordt automatisch bepaald aan de hand van de initialisatie. Dus varhoi = 5; hier wordt var een int. Echter niet aan te raden; het maakt het mogelijk dat de compilerfoutmeldingen niet geeft, en het wordt moeilijk voor de gebruiker om het programma te lezen.

    4.6 Methode-definitiesMethoden helpen shit duidelijker te maken door variabelen die meerdere keren worden gebruikt teveranderen in een methode-aanroep. Je kunt bijvoorbeeld een huisje tekenen, maar dat drie keer

  • 8/18/2019 Samenvatting Mobiel Programmeren

    13/30

    doen wordt een hele lap zooi. Als je een methode ‘huisje’ aanmaakt, kun je gewoo n drie keer demethode aanroepen. Heb je het in 3 regels ipv 400. Vervolgens zet je in de methodeheader de x, y,en breedte, en dan kun je die dingen zelfs aanpassen zodat je in één regel een huis met andereafmetingen kunt maken.

    4.7 Op zoek naar parametersParameters maken methoden flexibeler, zoals te zien is bij de huisjes. Fuck dit is chill, had ik meermoeten implementeren.

    Je moet wel opletten hoe flexibel je het wilt maken, want iedere keer een zieke hoeveelheidparameters moeten aangeven maakt dingen anders weer complex. Dit is te vertalen naar een GUIwaar je de gebruiker opties geeft. Een paar is heel fijn, maar heel veel is niet chill.

    (Kun je parameters een waarde geven voor als zij niet worden gebruikt in de methode-aanroep?Zou veel oplossen)

  • 8/18/2019 Samenvatting Mobiel Programmeren

    14/30

    H5. Objecten en methoden5.1 VariabelenVariabelen moet je declareren.

    Int: staat voor integral number, oftwel het hele getal.

    Initialisatie: De eerste toekenningsopdracht; dit kan ook tegelijk met de declaratie zijn.

    Bij floats en doubles etc. gebruiken wij een punt, en geen Nederlandse decimale komma.

    5.2 ObjectenEen object is een groepje variabelen dat bij elkaar hoort. C# is een object-georiënteerdeprogrammeertaal. Natuurlijk spelen objecten hier dus een belangrijke rol.

    Objecten schermen hun opbouw af. Een Activity gebruikt veel variabelen om zijn taak uit te voeren,en het is voor ons lang niet altijd nodig om alle variabelen te kennen. Het kan handig zijn je eenvoorstelling te maken, maar het is niet noodzakelijk. Het is ook eerder uitzondering dat je nietprecies weet hoe een object is opgebouwd. Soms wordt het zelfs opzettelijk geheim gehouden, zodatde programmeur van het object nog dingen aan kan passen aan de variabelen zonder dat oudeprogramma’s eronder te lijden heb ben.

    Je hoeft bij objecten dus niet te weten hoe ze zijn opgebouwd, maar wel wat je ermee kan doen.

    Methoden hebben een object onder handen, en heeft daarom toegang tot de variabelen van ditobject. Hoewel je met

    Canvas.DrawLine(0,0,1,1,verf)

    een lijn tekent, verander je het object zelf niet omdat je de methode DrawLine niet aanpast. Als jescherm.SetBackGroundColor(Color.Blue)

    doet pas je het object ‘scherm’ echter wel blijvend aan.Sommige objecten kun je wel aanpassen, zoals dus color (Color c= new Color(222,111,123)), of Rect.Je kunt dus bijvoorbeeld het volgende doen:

    Rect r = new Rect(0, 0, 1, 1, verf);c.DrawRect(r, verf);

    Hoewel ze hetzelfde lijken als je ze zo behandelt, zijn Rect en Color wel heel verschillend van elkaarwat betreft de gebeurtenissen in het geheugen. Dit komt omdat Color een struct is, en Rect eenclass.

    Bij een struct zoals Color, gebeurt er bij het declareren van variabelen iets anders dan bij een class.Als je bijvoorbeeld drie kleuren wilt definiëren, kun je het volgende doen:

    Color k1, k2, k3;Color k1 = new Color(255, 0, 0);Color k2 = k1;Color k3 = k1;

    Als je nu groenwaarde van k2 aanpast, verandert k1 niet mee omdat k2 een kopie is van k1.

  • 8/18/2019 Samenvatting Mobiel Programmeren

    15/30

  • 8/18/2019 Samenvatting Mobiel Programmeren

    16/30

    5.5 Constanten (leeg)

    5.6 Static propertiesTot nu toe is op verschillende plaatsen een notatie A.B gebruikt:

    Bij het gebruiken van een sub-library: using Android.Graphics; Bij het opvragen/wijzigen van een property: scherm.TextSize of naam.Length; Bij het aanroepen van een methode: scherm.SetBackGroundColor(k); Bij het opvragen van een standaardkleur: Color.Yellow; (static property)

    Property: eigenschap van een bepaald object.

    Static property: eigenschap van een bepaald object die je niet aan kunt passen (zoals Color.Yellow).

    Bij het opvragen van static properties staat er altijd een klasse voor de punt (Color.Yellow). Bij niet-static properties is dit een object (scherm.TextSize).

    H6. Touch & go6.1 TouchTouchEventArgs: Wanneer je een touch eventhandler hebt, en niet een knop-eventhandler. Wewillen namelijk niet alleen weten dat het scherm is aangeraakt, maar ook waar het scherm isaangeraakt. Als je dit wilt weten, doe je:

    Public void RaakAan (Object o, TouchEventArgs tea){

    Float x = tea.Event.GetX();Float y = tea.Event.GetY();

    }

    Bij PointF’s is het type van de x en y geen int, maar een float. Dit, omdat in sommige gevallen hetscherm vergroot kan woden weergegeven en je dan wel met halve pixels wilt kunnen werken. Hierbijis gekozen voor een float ipv double, omdat 7 cijfers achter de komma meer dan genoeg zijn.

    Om de aanraking ook in de OnDraw te kunnen gebruiken, declareer je PointF punt; als variabelewaarin de coördinaten van het aangeraakte punt kunnen worden opgeslagen. Het PointF wordt dan

    Punt = new PointF(x, y);

    En als je een cirkel wilt tekenen doe je heel vrolijkc.DrawCircle(punt.X, punt.Y, 40, verf);

    of een DrawBitmap zoals in puntenklikker gebeurt.

    Toestand van een programma: Is hier de variabele ‘punt’. Wijzigt als gevolg van akties van degebruiker, en de toestand wordt hier afgebeeld door OnDraw.

    Invalidate: Forceer het tekenen van de View. Kan met this.Invalidate(); Wil je altijd als laatste punt inde methode of klasse.

    Met properties als Width en Height kun je zorgen dat de variabele wordt getekend op een plek dieafhankelijk is van de grootte van het scherm; dit is handig voor apps omdat telefoonschermenverschillende groottes hebben.

  • 8/18/2019 Samenvatting Mobiel Programmeren

    17/30

    Null pointers: wanneer een object nog geen waarde heeft (bijvoorbeeld wanneer het scherm nog nietis aangeraakt), kun je van de variabele geen properties opvragen; hij is immers nog null (zonderwaarde).

    If-opdracht: hiermee kun je zorgen dat een opdracht pas wordt uitgevoerd wanneer je variabele niet

    null is. Voorbeeld:If (punt != null) c.Drawcircle(punt.X, punt.Y, 15, verf);

    != betekent ‘is niet gelijk aan’.

    =! Betekent ‘wordt niet’. Dit wordt gebru ikt bij booleans.

    6.2 LijstenToestand van een programma: Alle variabelen die nodig zijn zodat de zijn werk kan doen.

    List: een object met vele deel-objecten. Is een generiek type , wat betekent dat het voor meerderetypen mogelijk is (getallen, strings..). je declareert het bijv. als List punten; met .Add(); kun jeelementen teovoegen aan een lijst. Is leuk met een foreach.

    If-loop : als x wel/niet y is, dan..Foreach-loop: voor iedere x in y..

    6.3 SensorsHelemaal m ooi, zijn dingen die aanrakingen of locaties ‘aanvoelen’ zodat je erop kunt reageren.

    Listener: object dat geïnformeerd wil worden als er iets aan de sensor verandert.

    De sensormanager : informeert de listener dat er iets verandert. Dat gebeurt doordat de manager deOnSensorChanged -methode aanroept. Deze moet er natuurlijk wel zijn. En omdat we het object thishebben geregistreerd als listener, moet in de klasse waar this naar refereert die methode wordengedefinieerd. In de header van de klasse moet dit worden aangekondigd (gedeclareerd?) . Daaron zet

    je het volgende in de header van de klasse:

    Class kompasview : view, IsensorEventListener

    Hierdoor staat vermeld dat kompasview een subklasse is van View, maar ook een implementatie vanIsensorEventListener. Met andere woorden: kompasview beloft zich te gedragen zoals dat van eenIsensorEventListener wordt verwacht.

    Interface: Een opsomming van de benodigde methodes. Hierdoor kun je this gebruiker als eerste

    parameter van RegisterListener.

    Het diktaat legt hier de matrix(postscale etc) uit.

    6.4 – 6.6 is leeg in het diktaat

  • 8/18/2019 Samenvatting Mobiel Programmeren

    18/30

    H7. Herhaling en keuze7.1 De while-opdrachtWhile-opdracht: Een opdracht herhaaldelijk uitvoeren zonder dat daarbij een list de sturende factoris. Hieronder een voorbeeld:

    Public int test(){ Int x;

    x = 1;while (x < 1000)

    x = 2*x;return x;

    }

    Het bestaat dus uit een soort header (while ( x < 1000)) en een body (x = 2*x). De body wordtuitgevoerd terwijl (while) de header geldt.

    Twee eisen:

    De variabelen die in de body gebruikt worden, moeten voorafgaand aan de herhaling eenbeginwaarde hebben gekregen

    De voorwaarde die de herhaling controleert moet een variabele gebruiken die in de bodywordt veranderd (zo niet, dan is de herhaling óf direct, óf helemaal nooit afgelopen)

    Je gebruikt vanwege punt 2 altijd een teller (bijv n=0, whil n

  • 8/18/2019 Samenvatting Mobiel Programmeren

    19/30

    7.3 de for-opdrachtIn de bodies van veel while-opdrachten komt een teller voor die wordt opgehoogd. Verkorteschrijfwijzes zijn

    n = n + 1; wordt n++; n = n + 2; wordt n+= 2;

    Hieronder de syntax voor while- en for-opdrachten.

    N=0 zonder puntkomma is een expressie. Maar met puntkomma is het een opdracht!

    Omdat methode-aanroepen en toekenningsopdrachten allebei expressies met een puntkomma zijn,kan hun syntax worden vereenvoudigd tot het ‘object’. Zie hie rvoor de syntax in het diktaat.

    7.4 Bijzondere herhalingenNiet-uitgevoerde herhaling: Wanneer de voorwaarde in de header in het begin al onwaar is.

    Oneindige herhaling: Waarde wordt opgehoogd zonder dat er een einde aan komt (verkeerde teller)

    Herhaalde herhaling: Wanneer de teller wordt gedefinieerd met een loop. Dus een loop in een loop.

    7.5 Toepassing: KleurenkubusRadio button: knop die lijkt op de bandbreedteknoppen van een radio.Een mechanisme zorgded er

    vroeger voor dat andere knoppen omhoog sprongen als er eentje werd ingedrukt.

    Dus: O rood O groen O blauw

    RoadioGroup: Subklasse van LinearLayout die behalve de ordening, er ook voor zorgt dat als je eenvan de buttons in de groep indrukt, bij de voorheen aangevinkte button het vinkje verdwijnt. Deknoppen hebben een Click event, de SeekBar heeft een ProgressChanged-event.

    In de listing kun je zien dat een methode wordt gebrukt voor het indrukken van verschillendeknoppen.

    7.6 Toepassing: Renteberekening

    *= betekent “wordt vermenigvuldigd met”.

  • 8/18/2019 Samenvatting Mobiel Programmeren

    20/30

    Je kunt ook de layout maken met Main.xml. Dit zorgt ervoor dat je het in een XML-file zet, endaarnaar verwijst in je activity. Je kunt in de activity variabelen aanmaken waarmee je deuserinterface-element nog kunt manipuleren. In plaats van de aanroep van de constructormethode,moet je nu zoeken aan de hand van hun resource-identificatienummer:

    bedragBox = FindViewById(Resource.Id.bedragBox);

    Daarna kun je de variabelen gebruiken zoals je gewend bent.

    Exception: Uitzonderlijke omstandigheid die het onmogelijk maakt dat een methode compleet wordtuitgevoerd.

    Try-catch opdracht: Je kunt de aanroep die mogelijkerwijs een exception zal opwerpen in de bodyvan een try-opdracht zetten. In het geval dat er inderdaad een exception optreedt, gaat eht danverder in de body van het catch-gedeelte. Bijvoorbeeld:

    Try

    { n = int.Parse(s)Uitvoer.Text = $”kwadraat van {n} is {n*n}”;

    }Catch (Exception e){ uitvoer.Text = $”{s} is geen getal”; }

    In het catch- gedeelte wordt de try als het ware “opgevangen”. De accolades moeten bij try en catchblijven staan, ook al hebben ze maar één opdracht.

    Het type Exception is een klasse met allerlei subklassen. Deze verschillen in het soort details dat je

    over de exception kunt opvragen (door het opvragen van de proerpties van het exception-object). Als je hier niet in geïneresseerd bent kun je ruwweg het Exception-object declareren.

    Je kunt ook meerdere catches bij één try plaatsen.

    H8. Goede bedoelingen8.1 Een app met meerdere activiteitenTot nu toe hebben onze apps gewerkt met één Activity, die in zijn content view gegevens aan degebruiker presenteerde. Nu gaan we met meerdere activities werken. De app Multi gebruikt 3mainActivities, waarvan er maar bij eentje wordt aangegeven dat MainLauncher = true.

    8.2 DialogenDialoog: een pop-upwindow waarin de gebruiker gegevens kan invoeren. Zolang de dialoog actief iskan de gebruiker niet de rest van de app bedienen. In een dialoog zijn altijd knoppen aanwezig om dedialoog weer af te sluiten: met succes (“ja”) of zonder succes (bijv. “nee”). De gebruiker kan dedialoog ok cancelen met de terugknop.

    DatePickerDialog: Maakt een dialoog aan waarin je een datum kan kiezen. Het werkt als:

  • 8/18/2019 Samenvatting Mobiel Programmeren

    21/30

  • 8/18/2019 Samenvatting Mobiel Programmeren

    22/30

    (ik zie hier niet een goede syntax voor een typeof in)

    Met PutExtra kun je het Intent-object aanpassen:

    i.PutExtra(“boodschap”, “Hallo!!”);

    Aan de ontvangende kant, dus in de methode OnCreate van de klasse Hallo, is de intent waarmee hijwerd gelanceerd blijkbaar:

    String s = this.Intent.GetStringExtra(“boodschap”);

    If (s == null) s = “geen bericht”;

    Je kunt op deze manier meerdere extra’s doorgeven aan je gelanceerde activity. Je haalt de waardedan op met de stringnaam (hier “boodschap”). De if -opdracht gebruiken we om een crash tevoorkomen en zo duidelijk te vinden wat er mis gaat.

    Je kunt behalve strings ook waarden van andere types doorgeven. De tweede waarde van dePutExtra is dan bijvoorbeeld een int. Bij het ontvangen ziet het er dan anders uit:

    This.teller = this.Intent.Get IntExtra(“startwaarde”, 0);

    De methode GetIntExtra is specifiek bedoeld om int- extra’s op te halen. De tweede paramter is eendefault-waarde voor het geval dat de gevraagde extra niet bestaat. Er zijn 24 versies van PutExtrabeschikbaar, voor 24 types (int, string, double, bool etc..). Gebruik hiervoor Get Type Extra om ze op tehalen.

    Dus: extra’s van een Intent worden gebruikt om informatie door te spelen aan een activiteit, zoalsparamters worden doorgegeven bij de aanrop van een methode. En net als de return- waarde vaneen methode aan diens aanroeper, kan een activiteit met de extra’s van een Intent -object ietsteruggeven aan de originele activity. Hieronder een voorbeeld met een override op de Finish:

  • 8/18/2019 Samenvatting Mobiel Programmeren

    23/30

    Public override void Finish(){ Intent i = new Intent();

    i.PutExtra( “eindwaarde”, this.teller);this.SetResult(Result.Ok, i);

    base.Finish();

    }

    Aan de andere kan kunnen we dit opvangen door de methode OnActivityResult te overriden:

    Protected override void OnActivityResult(int code, Result res, Intent data){ base.OnActivityResult(code, res, data);

    if (code == TellerCode && res = Result.Ok){ this.stand = data.GetIntExtra(“eindwaarde”, 0);

    b2.Text = $”Teller: {stand}”;}

    }

    Omdat de methode wordt aangeroepen door iedere gelanceerde activiteit, onderscheiden deactiviteiten zich met een unieke code. Deze werd vastgelegd bij het lanceren van de betreffendeactiviteit. Dat lanceren gebeurt hierom door middel van StartActivityForResult (hoe, wat?) ,waaraan we een tellercode kunnen meegeven. Dit moeten we een constante maken zodat we hemniet meer per ongeluk veranderen. Het ziet er dan zo uit:

    Const int TellerCode = 12345;Intent i = new Intent(this, typeof(TellerAct));

    i.PutExtra(“startwaarde”, stand);

    this.StartActivityForResult(i, TellerCode);Je kunt natuurlijk ook met Intent standaard-apps lanceren, of websites. OP deze manier kun jestandaard-diensten integreren in je app. Met ActionView geef je aan dat je een website wil.

    ActionSend: standaard-intent waarmee je kunt delen/sharen. Je intent is dan newIntent(Intent.ActionSend); door andere parameters van SetType te gebruiken kun je ook foto’s offilms of andere media versturen.

    TimeSpan: Tijdsduur.DateTime: Tijd en datum.

    Het verschil van twee DateTimes geeft een TimeSpan, een DateTime plus ene TimeSpan geeft eenDateTime.

    8.4 Verkorte notatiesVoor- en nadelen van verkorte notatie:

    + duidelijker+ makkelijker te debuggen+ hip- soms onduidelijker

    Je kunt bij een intent de i weglaten omdat je de PutExtra-methode heerlijk direct aan je intent kuntgeven. De PutExtra lijkt namelijk in eerste instantie geen waarde te geven, maar stiekem returnt hijeen intent. Dankzij de ene return this; kun je dus direct het resultaat van PutExtra meegeven aan de

  • 8/18/2019 Samenvatting Mobiel Programmeren

    24/30

    StartActivity. Hierdoor wordt ‘i’ overbodig, en kun je de regels terugdringen naar één regel. Dit kanook bij AlertDialog.Builder! Voor het overzicht moet je het dan nog over meerdere regels verdelen,“maar het geeft wel een gevoel van schoonheid”. Bovendien maakt het mogelijk dat je de methodevoor NietStoppen en WelStoppen naar één regel terug kunt dringen. Met een...

    Lambda-expressie: Expressie waarmee je een methode kan aanduiden zonder hem een naam tegeven, met deze expressie:

    (object o, Eventargs ea) => { this.Finish(); }

    Of nóg korter:

    (o, ea) => { this.Finish();

    Of, helemaal kort:

    (o, ea) => this.Finish()

    Wat overblijft is de essentie van de event-handler, en die kunt je in zijn geheel opschrijven op de plekwaar hij nodig is (de AlertDialog).

    Tot slot, een alternatief voor de if-opdracht: in plaats van

    String s = this.GetStringExtra(“boodschap”);if (s == null) s = “geen bericht”;

    Kun je met ?? het zo opschrijven:

    String s = this.Intent.GetStringExtra(“boodschap”) ?? “geen bericht”;

    Het scheelt maar één regel, maar het stimuleert je wel om waarden die null kunnen zijn altijd vaneen default-waarde te voorzien.

    H9. Klassen, Strings en Arrays9.1 KlassenEen klasse is

    Een groepje methoden (Vaak) een subklasse van een andere klasse Een type object

    Om de werking als type object nog eens uit te leggen, maken we een nieuwe klasse Kleur. Deze isanders dan Color omdat Color een struct is (d’oh).

    Een nieuwe Kleur-klasse kunnen we dus behandelen als een object. We kunnen dus een klassedeclareren in een andere klasse:

    Kleur oranje, paars;oranje = new Kleur();paars = new Kleur();

    Een object is, nogmaals, een groepje variabelen dat bij elkaar hoort. In de klasse Kleur definiëren wedus de variabelen die erbij horen. We kunnen dus mooi in de klasse Kleur drie public bytes

  • 8/18/2019 Samenvatting Mobiel Programmeren

    25/30

    declareren; Rood, Groen en Blauw. Je kunt er nog een Maximaal bij doen, en dan zeggen dat die 255bytes is. Hierdoor kun je Maximaal gebruiken om waarden te bepalen (door hem te delen,bijvoorbeeld).

    Je kunt vervolgens met een constructormethode variabelen van het object een beginwaarde geven,

    bijvoorbeeld:public Kleur(){

    Rood = 255; Groen = 255; Blauw = 255; }

    Als je dit niet zou doen, zouden Rood, Groen en Blauw automatisch het getal 0 krijgen. Dan heb jedus zwart ipv wit. De Constructormethode wil je eigenlijk zoveel parameters meegeven als wordengedeclareerd in de klasse, dus dat zou hier het volgende worden:

    Public Kleur(byte r, byte g, byte b){

    Rood = r; Groen = g; Blauw = b; }

    Maar je kunt ook de parameter x meegeven en de drie variabelen x geven. Dan krijg je dus voor x alletinten grijs. Kleur(180) wordt dan (180, 180, 180) dus lichtgrijs, Kleur(40) wordt donkergrijs.

    En zo heb je een object Kleur.

    Je kunt ook een methode GrijsWaarde maken, waarin je een formule returnt die zorgt dat de kleurgrijs wordt. En zo kun je allemaal dingen doen met je Kleur-object. Het is gebruikelijk dat je ook een

    methode ToString maakt, die een stringwaarde returnt. Dat is

    Public override string ToString(){

    Return $”blabla”; }

    Klassen die in hun header niet tot subklassen van andere klassen worden gemaakt, zijn subklassevan de klasse object . In object zit een ToString, en dus moet je deze in de context van Kleuroverriden. Hij wordt automatisch aangeroepen als je een geïnterpoleerde string gebruikt.

    Object: Oer-superklasse van alle klassen. Uiteindelijk is iedere klasse indirect deel van de klasseobject. Daarom heet hij ook object, want het enige dat alle klassen gemeenschappelijk hebben, is datze het type zijn van een ‘object’.

    Virtual: wat was dat ook alweer? Iets met standaard aangemaakt en aanpasbaar met override?

    Split: Methode waarmee je een string uit elkaar kunt peuteren. Dit kun je doen in een extraconstructormethode (of methode maken die meer doet).

    Variabelen die static zijn gedeclareerd, zitten niet in elk object . Ze zitten alleen maar in de klasseomdat ze er zijdelings iets mee te maken hebben. Ze zijn dus anders dan andere variabelen dieworden gedeclareerd in de klasse.

  • 8/18/2019 Samenvatting Mobiel Programmeren

    26/30

    Ook methoden kunnen static zijn; dan hebben ze geen object onder handen. Ze zitten alleen maar inde klasse omdat ze er zijdelings iets mee te maken hebben. Een voorbeeld hiervan is Parse , die inveel klassen aanwezig is. Parse heeft een string als parameter, en levert een nieuw object op vandeze klasse. Als we hem schrijven in de constructormethode:

    Public static Kleur Parse(string s){return nieuw Kleur(s);

    }

    Omdat static methoden geen object onder handen nemen, hoef je ook geen object voor de punt tezetten bij een aanroep. Hierdoor kun je dus:

    Kleur test;test = Kleur.Parse( “123 44 8”);

    Alle methoden uit de klasse Math zijn ook static.

    Static variabelen kunnen van ieder type zijn;; en dus ook van het type Kleur. Hierdoor kun jeKleur.Kleur doen, en een paar basiskleuren maken die je kunt aanroepen als methode-aanroep.Hierdoor wordt het een static property (zoals Color.Green)

    9.2 StringsDe klasse String heeft de volgende methoden en properties:

    String Length() bepaalt de lengte van de string String Substring(int x, int n) selecteer n letters van de string vanaf x String Concat(object s) plakt een tweede string erachter Bool Equals(string s) vergelijkt string letter voor letter met andere string Int IndexOf(string s) bepaalt op welke plek s het eerst voorkomt String Insert(int p, string s) voegt s in op positie p String[] Split() splits de string op in losse woorden, en levert een array van strings op, met in elk

    array-element een enkel woord. De woorden worden gescheiden door whitespace. String[] Split(char c) een variant van Split, waarbij je zelf kun opgeven door welk symbool de

    woorden worden gescheiden.

    In alle gevallen waar een string wordt opgeleverd, is dit een kopie van de originele string. Een stringis hierdoor immutable: eenmaal geconstrueerd wordt de inhoud nooit meer veranderd.

    De klasse string heeft ook operatoren:

    + doet hetzelfde als Concat == doet hetzelfde als Equals. Als dit niet zo was, zouden de object-verwijzingen worden

    vergeleken. En het is mogelijk dat twee strings verwijzen naar verschillende opbjecten dedezelfde inhouden. De herdefinitie van == lost dit op.

    Indexer: speciaal soort member, namelijk de x plek in een array of lijst.

    Afzonderlijke letters in een string zijn van het primitieve type char. Een van de voordelen van char

    boven string-objecten met lengte 1, is dat charwaarden direct in het geheugen staan, en dus niet eenindirecte object-verwijzing nodig hebben.

  • 8/18/2019 Samenvatting Mobiel Programmeren

    27/30

    Speciale notitie van char-waarden: Je tikt gewoon het gewenste letterteken, en zet daar enkele ( ‘ ’) aanhalingstekens omheen. Dit, ter onderscheiding van string-constanten, waar dubbeleaanhalingstekens omheen staan:

    Char sterretje;

    string hekjes;sterretje = ‘*’ ;hekjes =“####”;

    Tussen enkele aanhalingstekens mag dus maar één symbool staan; dubbele aanhalingstekens kunnen0, 1, of meerdere symbolen bevatten.

    Code pages: ‘pagina’s’ met 256 landsspecifieke symbolen. NL heeft Latin1. Daarin had je ruimte voor,naast 127 normale symbolen, gebruik te maken van 128 landsspecifieke symbolen. Is nogal lastigvoor bijvoorbeeld Chinees.

    Unicode: Oplossing voor Chinees probleem. Hiermee kun je 2^16 (dus 65536) symbolen kwijt. Deeerst 256 tekens komen overeen met Latin1. Char-waarden worden opgeslagen via de Unicode-codering.

    Het is belangrijk dat je aanhalingstekens pijnlijk precies opschrijft.

    Speciale char-waarden: tekens die niet op de standaard char-manier aan te duiden zijn. Dit zijn:

    ‘\n ’ voor einde-regel-teken; ‘\t ’ voor tabulatie; ‘\\ ’ voor het backslash-teken ‘\ ’ ’ voor het enkele aanhalingsteken ‘\ ” ‘voor het dubbele aanhalingsteken

    Je kunt de Unicode-waarde van char achterhalen door bijvoorbeeld int i = ‘*’; te doen. Je kunt ookeen char-waardeer ook uit een int halen, maar dan moet je wel immense getallen anticiperen. Ditdoe je door c = (char) i; Verder kun je ook heel leuk rekenen met unicode-waarden van char: hetsymbool na de ‘z’ is(char)( ’z’ + 1);.

    9.3 Arrays Array: een rij variabelen.

    Als je een array wilt gebruiken moet je, net als bij een object, een variabele declareren die een

    verwijzing naar de array kan bevatten. Dus: int [] tabel; de losse haken geven hier aan dat we nieteen int-variabele declareren, maar een array van int-variabelen. De tabel zelf is niet de array: het iseen verwijzing die naar de array zal gaan verwijzen. Dit gebeurt met een toekenningsopdracht,zoals: tabel = new int[5];

    De kracht van arrays ligt in het feit dat je het nummer van de gewenste variabele met een expressiekan aanduiden. Je kunt ze andere waarden geven, of met een for-loop bijvoorbeeld allemaal dezelfdewaarde geven.. de mogelijkheden zijn eindeloos. Als je dit wilt doen,kun je Length gebruiken alsbovengrens:

  • 8/18/2019 Samenvatting Mobiel Programmeren

    28/30

    Int nummer; for (nummer=0; nummer

  • 8/18/2019 Samenvatting Mobiel Programmeren

    29/30

  • 8/18/2019 Samenvatting Mobiel Programmeren

    30/30

    KleurAdapter = new ArrayAdapter(nog twee parameters, kleuren);

    Kleuren is de array van strings die gebruikt gaat worden (waarom niet KleurNamen?) Vervolgens geef je het adapter-object als geheel aan een property van de ListView (Hier kleurLijst) inbeheer. Die weet daardoor de kleurnamen wel te vinden.

    kleurLijst.Adapter = kleurAdapter;

    Nu hebben we een ListView waarin de kleurnamen zichtbaar worden.ChoiceMode: selecteerbare lijstelementen. Er zijn drie mogelijke ChoiceMode-waarden:

    None: als de lijstelementen niet aanvinkbaar zijn Single: als de gebruiker één element mag aanvinken Multiple: als de gebruiker meerdere elementen mag aanvinken

    De tweede parameter van de ArrayAdapter is de soort layout van de keuzes. Dit wordt danAndroid. Resource.Layout. ..:

    SimpleListItemMultipleChoice : checkbox-achtige layout SimpleListItemActivated1 : als de hele tekstregel moet oplichten SimpleListItemSingleChoice : radiobutton-achtig (voor Single-keuzelijsten) SimpleListItem1 : Voor niet-selecteerbare lijsten.

    Als je ChoiceMode niet None is, worden je vinkjes automatisch geplaatst. Als je meer wilt doen kun jeeen event-handler ItemClicked koppelen. De parameter hiervan is een object waarin het nummervan de aangeklikte regel beschikbaar is in de property Position. Dat is dus de index van de array.

    Toast: Dat wegvagende pop-upje dat na een paar seconden automatisch verdwijnt. Is veel minder

    hinderlijk dan een AlertDialog. Je roept het op met Toast., bijvoorbeeldToast.Position();

    CheckItemPositions: een property van de ListView waarmee je kunt zien welke lijst-elementen zijnaangevinkt. Dat levert een object op, waarvan je voor alle getallen in tot zijn Count kan opvragen watde key is, en wat daarbij de value is.Key: het volgnummer van een lijstelement.Value: een bool die true is als het element is aangevinkt.

    10.2 Een eigen AdapterAls je niet alleen de namen van je strings (hier de kleuren) wilt laten zien,maar ook de kleuren, moet

    je dit aanpassen in je eigen klasse voor de adapter. Verder heb je dan ook een klasse nodig waarineen object wordt beschreven die de relevante informatie van elke lkeur bevat: de naam, en debijbehorende RGB-waarde.

    10.3 Interactief toevoegen en verwijderenAls je op een lijstelement klikt, kun je ook een aparte activity lanceren waarin de gebruiker de naamen/of kleur kan aanpassen. Dit kan op dezelfde manier als beschreven bij de Intent.

    10.4 Data bewaren in een databaseDit kan, maar het wordt niet uitgelegd in het diktaat. Wel is er een listing die het schrijft, maar ikverwijs je hiervoor door naar de slides en je eigen ervaring.