JAVA - edX - Introduction to programming with Java JAVA REPRESENTATION OF PROGRAMS source code datgene dat je als java code intypt machine code is datgene dat over is als de source code gecompileert is naar machine code. Dat gebeurt door een compiler. Er moeten dus meerdere compilers zijn, voor elke source-code-taal een. JVM = Java Virtual Machine Code JRE = Java runtime Envirement = ( JVM + class libraries ) JDK = Java Development Kit = (compilatie + source code + JVM + class libraries) WORA = Write Once, Run Anywhere Interpreter programma's moeten vertaald worden naar machine taal PROGRAMMAS, PROCESSEN & CONVENTIES program Een "programma" is de opname van de berekening, het is tekst dat dienst doet als instructies voor de computer. Een programma is een string, een reeks van characters en kan daardoor als data gezien worden (Static view). Het kan ook als invoer dienen voor een ander programma en dan weer de tekst doorgeven als output. Dat doet een compiler. Het is gerelateerd aan applicatie en algoritme. applicatie of app, als we spreken van een specifiek programma dat iets aparts doet. algoritme als een specifiek strategie gevolgd wordt om een probleem op te lossen. Hetzelfde algoritme kan in meerdere en verschillende programmeertalen gebruikt worden. compiler is een programma dat de source code verwerkt en object code als output heeft. Daardoor kan het op de harde schijf opgeslagen worden. Omdat we weten hoe strings in binary vorm opgeslagen kunnen worden kunnen we deze vorm opslaan. process is een programma dat uitgevoerd wordt, in een programma lopen een of meerdere processen als het wordt uitgevoerd. Dat noemt men de Dynamic view van een programma, zijn de instructies. constructor is eigenlijk een creatie en declaratie in een opdracht. Is een bepaald soort methode om van een klasse een object te maken. Bv: Klassenaam objectnaam = new Klassenaam(); implementati invoeren e initialisatie is het toewijzen van een waarde aan een variabele Conventies Klassenamen beginnen altijd met een hoofdletter. Objectnamen, variabelen, attributen en methoden beginnen altijd met een kleine letter In de Constructor naam staat de Klassenaam die ook weer met een hoofdletter begint. Bij lange namen gebruik camelcase en geen underscores. Camelcase is een hoofdletter in de naam gebruiken als er normaal een nieuw woord zou beginnen, bv: voorbeeldVanCamelcase Namen van CONSTANTEN worden weergegeven in hoofdletters. Geen gereserveerde Java woorden gebruiken voor klasses, methoden of variabelen. NULL geeft aan dat er wel gedeclareerd is maar nog geen waarde aan een object is toegekend. Achter een methode moet altijd (); staan ook bij een constructor (want dat is ook een methode) PROGRAMMEREN - BASIS starten met bibliotheek opvragen import verkiezingen.Stemmachine; de klasse aanmaken, geeft toegang aan Deze moet er altijd in staan !! public class Voorbeeld1{ declaratie ve stringvariabele public static void main(String[] args){ String uitslag; Pagina 1 van 10 JAVA - edX - Introduction to programming with Java declaratie ve variabele van het type Stemmachine en heeft de naam machine1 Stemmachine machine1; aanmaken (constrcutor) machine1 = new Stemmachine(); declareren en aanmaken in één regel (constrcutor) Stemmachine machine1 = new Stemmachnie(); De methode zetAan() van het object machine oproepen machine1.zetAan(); De methode stem() aanroepen van object machine en gelijk vullen met een string machine1.stem("Wouter Bos"); uitslag = machine.geefUitslagPerPartij(); De inhoud van de variabele uitslag wordt als waarde geprint op een nieuwe regel. System.out > print naar een message box. System.out.println(uitslag); sluiten main sluiten class } } declareren aangeven welk type variabele je gaat gebruiken en welke naam deze hebben. maken Het aanmaken van nieuwe variabelen met new. declareren én maken in 1 regel declareren en aanmaken van een variabele. initialiseren het toewijzen van een bepaalde waarden aan je variabelen. methode aanroep object.methodenaam(parameterlijst); Achter een methode aanroep moet altijd () gebruikt worden !!!! methode aanroep is als volgt: bv: public void stem(String naam) 1. public > eerst hoe de toegang is public of pricate 2. void > geeft aan wat de terugkeerwaarde is, bij void is er geen terugkeerwaarde 3. stem > is de naam van de methode 4. (String naam) > zijn de parameters van de methode package Een package bestaat uit een groep klassen die op de een of andere manier bij elkaar horen. this Voor een gegeven object is this een referentie naar zichzelf. Een attribuut is tijdelik onzichtbaar in een methode waar een formele parameterdezelfde naam heeft als het attribuut, door this te gebruiken wordt het attribuut toegankelijk. Constructor is een speciaal soort methode om een object te maken van een klasse, denk aan ()!! aanroep new Klassennaam(parameterlijst); de aanroep levert een instantie van klasse op: een object voorbeeld: Kandidaat arjan; arjan = new Kandidaat("Arjan Kok", "Breda"); een klassenaam begint altijd met een hoofdletter en het is gebruikelijk om geen underscores te gebruiken. Pagina 2 van 10 JAVA - edX - Introduction to programming with Java Opbouw JAVA programma in 5 stappen (stap 1 en 3 hoeft niet altijd aanwezig te zijn) packagedeclaratie en importopdrachten klasse creatie en declaratie (en eventueel attribuut declaraties) package naampackage; import packagenaam.klassenaam.enumNaam; /** documentatie * hier komt de tekst en uitleg over het programma * zodat het duidelijk en leesbaar is voor andere programmeurs */ public class VoorbeeldClass1 { private String attribuut1; methodedefinitie(s) voorbeelden public int add(int a, int b) { System.out .println("De som is : "+ (a+b)); return (a+b); } public boolean testAttribuut1(String x) { return (x.equals(attribuut1)); } public boolean setAttribuut1(String oud, String nw) { if (testAttribuut1(oud)) { attribuut1 = nw; klasse definitie System.out .println(canDrive); return true; } else return false; } } public static void main(String[] args) { VoorbeeldClass1 myVoorbeeldClass1 = new VoorbeeldClass1(); public Rekening(String naam, int nummer){ this.naam = naam; this.nummer = nummer; } methode main constructor > constructor > hier verwijzen naam en nr naar de attributen vd nieuwe rekening, zonder this. Zouden ze naar de waarden vd parameters constructor > wat doen > Calculator myCalculator = new Calculator(); myCalculator.add(5, 7); object.methodenaam(parameterlijst); // je hoeft niet alle gemaakte methoden op te roepen in de main, ze kunnen ook voor een subklasse gemaakt zijn. } afsluiten } VERGELIJKINGEN Er zijn 2 soorten variabelen, het type bepaald de manier van werken: Primitief type Referentie type ARITHMETIC OPERATORS Operator gebruik van operatoren als + of *, zie arithmetic/rekenkundige operators het aanroepen van een methode (rekenkundige) eigen Description + optellen Addition operator - Adds operands on both sides of the operator - aftrekken Subtraction operator - Subtracts the right hand operand from the left hand operand * keer Multiplication operator - Multiplies operands on both sides of the operator / delen Division operator - Divides the left hand operand by the right hand operand Pagina 3 van 10 JAVA - edX - Introduction to programming with Java % rest bij deling ++ 1 ophogen Modulus operator - Divides the left hand operand by the right hand operand and returns remainder Increment operator - Increases the value of operand by 1 -- 1 verlagen Decrement operator - Decreases the value of operand by 1 RELATIONAL OPERATORS bij vergelijken van primitieve typen, geeft TRUE of FALSE Operator eigen Description == gelijk aan != ongelijk aan > groter dan < kleiner dan Checks if the values of the two operands are equal or not, if yes then the condition becomes true. Checks if the values of the two operands are equal or not, if values are not equal then the condition becomes true Checks if the value of the left operand is greater than the value of the right operand, if yes then the condition becomes true. Checks if the value of the left operand is less than the value of the right operand, if yes then the condition becomes true. Checks if the value of the left operand is greater than or equal to the value of the right operand, if yes then the condition becomes true. Checks if the value of the left operand is less than or equal to the value of the right operand, if yes then the condition becomes true. >= <= groter of gelijk aan kleiner of gelijk aan LOGICAL OPERATORS Operator (logische) eigen Description && en AND Operator. If both boolean operands are true, the condition becomes true || of OR Operator. If any of the boolean operands is true, the condition becomes true niet in NOT Operator. Reverses the value of a boolean operand. volgorde als ze alle drie in een expressie gebruikt worden, krijgt ! Voorrang, daarna && en als laatste || ! ! > && > || ASSIGNMENT OPERATOR Operator = Description toewijzen / wordt Simple assignment operator. It assigns values from right side operands to left side operand INCREMENT X Operator (toewijzen) eigen (een variabele "ophogen" kan met …. X +=1;) eigen Description x += 1; optellen Addition - Adds c++ > tel 1 bij c op x -= 2; aftrekken Subtract - Subtracts x *= 3; keer Multiply x /= 4; delen Divide rest bij deling Modulus x %= 5; c-- > trek 1 van c af EXPRESSIONS AND OPERATIONS als…dan if ([voorwaarde]) { [conditie als waar]; } else { [conditie als onwaar]; } de else hoort bij de dichtstbijzijnde if tenzij het duidelijk anders wordt aangegeven door gebuik van haakjes. als…dan in een regel (ternary) stel : int fuelLevel = 3; char canDrive = (fuelLevel > 0) ? 'Y' : 'N'; System.out.println(canDrive); resultaat: repeat Het resultaat hier wordt Y, hier wordt de als…dan lus in een regel verwerkt bij het declareren van de variabele. while ([voorwaarde boolean]) { [conditie als waar/statements]; } herhalen tot een doel is bereikt, expressed met Boolean repeat met teller for ([variabele]; [voorwaarde]; [update statement]) {[wat moet je doen];} hetzelfde blijven (mbv een teller) doen tot een teller een een bepaalde waarde heeft. Het update statement wordt na de for loop uitgevoerd en niet ervoor, dus na hetgeen je moet doen als het waar is. switch statement voorbeeld: int keuze = 2; switch (keuze) { case 1: System.out .prtintln("je keuze was 1"); break; case 2: System.out .prtintln("je keuze was 2, echt waar"); break; Pagina 4 van 10 JAVA - edX - Introduction to programming with Java default: System.out .prtintln("je hebt niet gekozen"); break; } Hier wordt de regel "je keuze was 2, echt waar" weergegeven. De break heb je nodig om uit het switch statement te gaan nadat er voldaan is aan de conditie. Zonder de break zal Java door blijven gaan met zoeken of er voldaan wordt aan een van de conditie en neit meer stoppen. Default wprdt gegeven als er geen waarde voldoet aan de waardewn die bij case zijn opgegeven. expressie Een expressie is een constante (final) of een andere variabele of een resultaat methodeaanroep of een combinatie van deze met opratoren. ARRAYLIST Wordt gebruikt om aan een reeks objecten van een bepaalde klasse te kunnen refereren, er mogen geen primitieve types instaan, dus geen integers of doubles. ArrayList<Schelp> schelpen = new ArrayList<Schelp>(); add (T element) toevoegen element van type T, het element moet wel al gecreëert zijn. creatie en toevoegen kan in één regel: bv: verzameling.add(new Kandidaat("Femke", "Amsterdam")); get(int i): T size(): int for-each of: verzameling.add(naamKand) als de variabele naamKand al eerder gedeclareerd en creeert was. levert het i-de element (start vanaf 0) geeft het aantal elementen in de lijst, begint met 1 (het aantal van een array is altijd < dan de size en nooit <=) for (type naam: lijst){ // doe iets} Laat iets gebeuren, doen voor elke van de elementen in de arraylist. bv: for (Kandidaat k: kandidaten){ aantalStemmen = aantalStemmen+k.getAaantalStemmen();} hierin is type = Kandidaat naam = k >> een variabele lijst = kandidaten For-each is gemaakt om de hele verzamleing te onderzoeken. ARRAYS kenmerken begint altijd met 0 als eerste plek, dus 0, 1, 2, 3, 4, ………, n Een array kan van waarden verschillende typen bevatten, maar in één array hebben alle waarden hetzelfde type. Een array kan verschillende lengtes hebben, maar als de lengte van een array is vastgesteld kan deze niet meer worden gewijzigd, zonder de opgeslagen elementen te verliezen. Bij het aanmaken van een array wordt de lengte van de array al bepaald. De elementen van een array kunnen via indices benaderd worden. Een array naam met een index kan gebruikt worden zoals een integer variabele gebruikt wordt. length() declareren aangeven welk type en welke naam . maken a[2] gebruikt length() om het aantal attributen in een array te bepalen, zodra de array gemaakt is, ligt deze waarde vast en kan hij niet meer gewijzigd worden. staat hier voor de 2e index uit de array, dus 0, 1, 2 > het 3e element in de array Pagina 5 van 10 JAVA - edX - Introduction to programming with Java maken en declareren er zijn de volgende mogelijkheden en de rode worden het vaakste gebruikt. anArrayOfXxxx is hier de naam van de array. Bv int[] staat voor het type van de elementen. initialisatie Gebeurt als volgt voor bv een numeriek array: a = new int[5]; Deze array heeft een maximale lengte van 5 elementen. Is het toewijzen van de waarden aan een variabele of array. Alles in een keer Kan in een regel als volgt voor bv een numeriek array: int[] a = new int[4]; Deze array heeft een lengte van 4 elementen en de Indices gaan van 0 t/m 3. a[0] is hier het eerste element en a[3] het laatste. toewijzen van Een array naam met een index kan gebruikt worden zoals een integer variabele gebruikt waarden aan wordt. Bv: elementen maken, declareren én toewijzen (initialiseren) van de elementen kan ook in één regel gebeuren, op de volgende wijze: int[] a = {2, 0, 1, 5}; Het gebruik van het keyword new is nu niet nodig. kenmerken Een String is niet hetzelfde als een Char array. Je kunt wel een String naar een Char array conventeren en vise versa. Een element van een array kan zelf ook weer een array zijn. Dat wordt een bi-dimensionale array of multi-dimensionale array genoemd. Conclusie Bij de declaratie wordt de lengte van de array vastgesteld en kan niet meer worden gewijzigd. Alle elementen zijn van hetzelfde type en de elementen zelf kunnen ook weer uit een of meerdere arrays bestaan. ARRAYLIST Wordt gebruikt om aan een reeks objecten van een bepaalde klasse te kunnen refereren, er mogen geen primitieve types instaan, dus geen integers of doubles. Is een klasse om een verzamleing mee weer te geven, de objecten in deze verzameling moeten allemaal van het zelfde soort zijn en bestaat dus uit een serie data elementen. size() gebruikt size() om het aantal elementen op te vragen. ArrayList<T> ArrayList<Schelp> schelpen = new ArrayList<Schelp>(); add (T element) toevoegen element van type T, het element moet wel al gecreëert zijn. creatie en toevoegen kan in één regel: bv: verzameling.add(new Kandidaat("Femke", "Amsterdam")); of: verzameling.add(naamKand) als de variabele naamKand al eerder gedeclareerd en creeert was. levert het i-de element (start vanaf 0) get(int i): T size(): int for-each geeft het aantal elementen in de lijst, begint met 1 (het aantal van een array is altijd < dan de size en nooit <=) for (type naam: lijst){ opdrachten; } Laat iets gebeuren, doen voor elke van de elementen in de arraylist. bv: for (Kandidaat k: kandidaten){ aantalStemmen = aantalStemmen + k.getAaantalStemmen(); } hierin is type = Kandidaat naam = k >> een variabele lijst = kandidaten For-each is gemaakt om de hele verzamleing te onderzoeken. ARRAYS, ARRAYLIST & FOR LOOPS For Loop voert een statement uit in een bepaalde volgorde, bv het veranderen van de waarden van de elementen in een array, dit noemt men Map: Pagina 6 van 10 JAVA - edX - Introduction to programming with Java Enhanced For Om door een array heen te lopen met een loop vanaf index 0 tot en met het einde van de array is zo Loop algemeen dat daar een speciale For Loop voor is gemaakt. De Enhanced For Loop, hier wordt de variabele elem gebruikt. De betekenis van dit stukje codering is gelijk aan de codering van optie 1 en optie 2. Dit noemt men Reduce: Mapreduce MapReduce kan in korte tijd veel data verwerken doordat het een grote taak opsplitst in deeltaken. Die deeltaken worden over meerdere computers verdeeld. Wordt veel gebruikt bij Big Data. DATA Flip Flop Bit kan maar 2 waarden hebben, 0 of 1. Kan 1 bit aan informatie opslaan. 1 flip flop = 1 booleon. Alles kan terug gebracht worden naar 0 en 1 1 flip flop Byte is 8 bits, java gebruikt een unicode mapping van 16 bits. Heeft 256 combinaties (2 tot de macht 8) bv getallen van 0 t/m 255 nibble Een nibble is een groepje van 4 bits DATATYPEN Datatype: integer type Omschrijving byte bestaan uit 8 bits en geven de getallen -128 tot 127 short bestaan uit 16 bits en geven de getallen -32768 tot 32767 int bestaan uit 32 bits en geven de getallen meer dan 2 biljoen long bestaan uit 64 bits en geven de getallen meer dan 2 biljoen float plus en min Primitieve datatypen single-prcecision 32-bit EEE 754 floating point. Is een datatype dat nummers met decimalen (floating point number) opslaat in JAVA en gebruikt 32 bits. double double-prcecision 64-bit EEE 754 floating point. Is een datatype dat nummers met decimalen opslaat in JAVA en gebruikt 64 bits. Altijd gebruiken !! 10101010b=170 en 01010101=85 horen bij elkaar > 85 + 170 = 255 geven een plus en min getal, min wordt aangegeven met een b achter de 8 bits codering boolean voor true of false, als er geen waarde is toegewezen is het altijd false. char vertegenwoordigd een enkelvoudig teken / single character'met single quotes insluiten integers byte short int > wordt het vaakste gebruikt long reals float double > wordt het vaakste gebruikt Referentie datatypen String een string is een reeks tekens achter elkaar. Een string is eigenlijk ook een object. Een string is immutable, niet veranderbaar, je maakt of een nieuw object of je wijst naar het object waar de string al instaat. Met equals kun je strings vergelijken. Java klassen KLASSEN, OBJECT en VARIABELEN schematisch weergeven schematisch weergeven variabelen (rechte hoeken) object (ronde hoeken) Pagina 7 van 10 JAVA - edX - Introduction to programming with Java de string "rood" in de variabele is eigenlijk ook weer een object. Dit zou ook aangegeven kunnen worden als een "apart" object met ronde hoeken. Indien dit voorkomt op tentamen wordt daarin aangegeven op welke manier dit in deze schema's weergegeven moet worden. klassediagram Een klasse is een beschrijving van gelijksoortige objecten. De klasse beschrijft: klassenaam over welke soort objecten gaat het attributen welke gegevens beheerd worden types wat voor gegevens het zijn methoden welk gedrag kan worden vertoond Heeft altijd dezelfde naam als de klasse. Hoe een instantie wordt gemaakt, altijd maken. In de constructor staat altijd een waarde voor alle attributen, op die manier krijgen ze een beginwaarde. final en/of static als bij een declaratie van een attribuut static en/of final staat, dan is het een klasse attribuut. En moet het onderstreept weergegeven worden in het klassediagram. KLASSE Definitie van een klasse [package declaratie] importopdrachten toegang class klassenaam [extends klassenaam] { attribuutdeclaraties constructordefinities methodedefinities } Data Hiding: Attributen zijn niet direct toegankelijk maar alleen maar opvraagbaar via methoden. Get is opvragen en Set is wegschrijven cq wijzigen Overerving: GUI GEBRUIKERSINTERFACES property Jframe Tonen ve Frame defaultCloseOpera moet ALTIJD gelijk zijn aan EXIT/EXIT_ON_CLOSE: zorgt ervoor dat bij het tion venster/frame gesloten wordt, de applicatie ook stopt. title Altijd invullen, geeft de titel van het fram aan. ContentPanel > moet op "Absolute Layout / (absoluut)" staan, dan kun je achteraf het scherm nog van Layout positie veranderen. Op de volgende manier kunnen we een venster genaamd BasiFrame laten zien op het scherm: public class BasisMain { public static void main(String[] args) { BasisFrame gui = new BasisFrame(); gui.setVisible(true); Pagina 8 van 10 JAVA - edX - Introduction to programming with Java } } Eerst wordt het scherm gedeclareerd en aangemaakt, daarna moeten we nog vertellen dat we het scherm willen laten zien. Daar zijn dus 2 aparte classes voor nodig, bv BasisFrame en BasisMain. GUI ARCHITECTUUR interfacelaag is een laag met klassen die de communicatie met de gebruiker verzorgen (bv Frame en het aanroepen van dat frame), hoe ziet het eruit. domainlaag is de laag met klassen die het deel van de werkelijkheid modelleren. architectuur Objecten van een GUI kunnen gebruik maken van object(en) uit de domeinlaag Objecten uit de domeinlaag mogen nooit gebruik maken van objecten uit de GUI-laag Door de architectuur in lagen zijn domeinklassen en GUI-klassen ontkoppeld: bij dezelfde domeinlaag kunnen meerdere GUI’s gemaakt worden Aandachtspu nten bij werken met GUI GUI bevat vaak een attribuut dat verwijst naar een object uit de domeinlaag Visuele componenten moeten waarden krijgen via domeinobjecten: meestal in methode mijnInit() Events moeten afgehandeld worden Ingevoerde of geselecteerde waarde moet gelezen worden: getText(), getSelectedItem() of getSelectedIndex(). Let op alle velden die je uitleest zijn strings. Gelezen waarden zijn Strings (getallen ook!!); vaak is conversie nodig In interfacelaag moet niet gerekend worden. Voor een GUI moeten altijd 2 klassen gemaakt worden, een voor de opbouw van het scherm en een voor het aanroepen van dat scherm. De GUI doet alleen het grafische deel, geen ectra functionaliteit hier toevoegen en niet laten rekenen. GUI & PACKAGES Lagen in aparte packages de verantwoordelijkheid van Klassen zijn klein, een GUI-klasse is alleen verantwoordelijkheid voor de visuele componenten. De verantwoordelijkheid van een methode mag nooit groter zijn dan een enkele taak. Pagina 9 van 10 JAVA - edX - Introduction to programming with Java Aandachtspu nten bij het werken met een GUI GUI bevat vaak een attribuut dat verwijst naar een object uit de domeinlaag Visuele componenten moeten waarden krijgen via domeinobjecten: meestal in methode mijnInit() Events moeten afgehandeld worden Ingevoerde of geselecteerde waarde moet gelezen worden: getText(), getSelectedItem() of getSelectedIndex() Gelezen waarden zijn Strings (getallen ook!!); vaak is conversie nodig Voorbeeld van een GUI VARIABELEN variabelen samenvatting: Pagina 10 van 10