Inleiding Informatica Prof. Dr. Olga De Troyer
Hoofdstuk I: Kennismaking met Java
Computer Snelle “reken” machine Voert enkel “reken”opdrachten uit “Alles” wordt (uiteindelijk) herleid tot getallen (0 en 1)
Programma Tekst die een computer een taak laat uitvoeren De tekst is een reeks opdrachten na elkaar, code genoemd Geschreven in een speciale taal, een programmeertaal
Doel van de cursus Aanleren van het lezen en schrijven van programma’s in de programmeertaal Java Java is een recente object georiënteerde programmeertaal
Basiselementen van Java Objecten Zijn weerspiegelingen van “dingen” uit de werkelijkheid
Objecten mijn_auto object Jan’s_fiets abstractie Modellen Werkelijkheid
Objecten Model Object abstractie Toestand Kleur: blauw Merk: Opel Nummerplaat:ARJ775 Attributen Gedrag Rijden Remmen Toeteren Methoden
Objecten communiceren Berichten Hallo, ik ben mr. Peters van de boekhouding. En u ben? Aangenaan, ik ben mevr Segers
Berichten sturen om taken uit te voeren Graag, lunch voor 3 personen
Een bericht activeert de overeenkomstige methode Object … Remmen Gedrag Rijden Remmen Toeteren
Een Object Georiënteerd programma Een programma is een opeenvolging opdrachten/instructies Een OO programma is een opeenvolging van berichten
Klassen Klasse Auto Toestand Kleur Merk Nummerplaat Gedrag Rijden Remmen Toeteren Gelijksoortige objecten met hetzelfde gedrag en gelijksoortige attributen worden gedefinieerd door een klasse
Instanties van een klasse Klasse Auto Toestand Kleur Merk Nummerplaat Gedrag Rijden Remmen Toeteren Klasse Instanties Object Toestand Kleur: blauw Merk: Opel Nummerplaat: ARJ775 Gedrag Rijden Remmen Toeteren Kleur: rood Merk: VW Nummerplaat: BXR824 Kleur: zwart Merk: Ford Nummerplaat: CVX779
Refereren naar objecten Referenties naar objecten Jan’sAuto MijnAuto Object Toestand Kleur: rood Merk: VW Nummerplaat: BXR824 Gedrag Rijden Remmen Toeteren Object Toestand Kleur: blauw Merk: Opel Nummerplaat: ARJ775 Gedrag Rijden Remmen Toeteren Opa’sAuto Object Toestand Kleur: zwart Merk: Ford Nummerplaat: CVX779 Gedrag Rijden Remmen Toeteren Laat toe om het object te identificeren: MijnAuto.Toeteren Opa’sAuto.Remmen
Berichten met argumenten Voorbeeld: MijnAuto.Rijden Maar hoe hard rijden? Argumenten voor berichten: MijnAuto.Rijden(90) Dus ook voor de corresponderen methode Klasse Auto Toestand Kleur Merk Nummerplaat Gedrag Rijden(snelheid) Remmen Toeteren
Vooraf gedefinieerde klassen en objecten De meest gebruikelijke klassen en objecten zijn reeds vooraf gedefinieerd in Java. Deze kunnen eenvoudigweg gebruikt worden.
Een voorbeeld Via Java willen we “Welkom iedereen” op de monitor van de computer laten verschijnen. Boodschap naar object “System.out” Referentie naar een voor gedefinieerd object van de voorgedefinieerde klasse “PrintStream” System.out .println(“Welkom iedereen”) Refereert naar het scherm
Java Statements Een boodschap naar een object sturen is een actie. De computer voert de acties uit wanneer het programma uitgevoerd wordt In Java noemt men acties “statements” Statements eindigen met een “;” System.out.println(“Welkom iedereen”);
Een Java programma Een opeenvolging van statements System.out.println(“Dit is mijn eerste Java programma”); System.out.println(“maar niet mijn laatste.”);
Een Java programma (2) Elke programma heeft een naam nodig en bijkomende informatie import java.io.*; class Programma1 { public static void main(String[] arg) { System.out.println(“Dit is mijn eerste Java programma”); System.out.println(“maar niet mijn laatste.”); }
Syntax regels Regels die zeggen wat mag en niet mag in een Java programma Vergelijkbaar met de grammatica regels van Nederlands, Engels, ...
Identifiers Elke klasse moet een naam hebben; namen worden ook wel identifiers genoemd Bvb: Programma1, PrintStream Hoofdletters en kleine letters zijn verschillend Bvb: System en system
Sleutelwoorden Woorden met een speciale vast gelegde betekenis noemt men sleutelwoorden (keyword) Bvb: import, class, public, static, void Tegen-vb: PrintStream
Regel: Twee opeenvolgende identifiers of sleutelwoorden zijn gescheiden door minstens één blanko. classProgramma1 Goed: class Programma1
De volgorde van de statements Statements worden uitgevoerd in volgorde van voorkomen. System.out.println(“Een Twee”); System.out.println(“Drie Vier.”); Resultaat is verschillend van
Leesbare programma’s Advies Zet elk statement op een aparte lijn Indien te lang, breek op en spring in vanaf de 2de lijn Gebruik TAB om in te springen, geen spaties
import java.io.*; class Programma1 {public static void main(String[] arg) { System.out.println(“Dit is mijn eerste Java programma”); System.out.println(“dit een een nieuwe lijn.”) } } import java.io.*; class Programma1 { public static void main(String[] arg) { System.out.println(“Dit is mijn eerste Java programma”); System.out.println (“dit een een zeeeeeeeeeeeeeeeeeeer lange lijn”); }
Commentaar Tekst in het programma om het programma (of delen ervan) te verklaren Wordt door de computer genegeerd /* dit is commentaar en mag over verschillende lijnen lopen */ // duidt aan dat de rest van de lijn commentaar is
import java.io.*; /* * Programma1 schrijft mijn naam en e-mail op het scherm */ class Programma1 { public static void main(String[] arg) { System.out.println(“Prof. Dr. Olga De Troyer”); // mijn naam System.out.println(“e-mail: Olga.DeTroyer@vub.ac.be”); // mijn e-mail }
Hoe een programma laten uitvoeren? 1. Programma invoeren in de computer 2. Programma vertalen naar een vorm die de computer kan uitvoeren 3. Instructie geven aan de computer om het programma uit te voeren
Stap 1: Programma invoeren Door middel van een bestand (file) Bestand Collectie van informatie Heeft een naam Kan opgeslagen worden op de harde schijf van de computer Bepaalde software laat toe om bestanden aan te maken, bvb: tekst-processors Bestanden voor programma’s worden aangemaakt door editors.
Editor Vergelijkbaar met een tekst processor Laat toe om tekst in te voeren Laat toe om de tekst te bewaren in een bestand Kent geen tekst formattering zoals tekst processor Bestand met programma Output Editor
Java programma bestanden Regel: Naam van bestand van een programma is naam-programma.java Bvb: Programma1.java
Stap 2: Programma vertalen Computer kan alleen primitieve instructies uitvoeren, instructies uit de machinetaal Machinetaal afhankelijk van soort computer Dus vertaalslag nodig van Java naar machinetaal
Vertalen van programma’s Compiler vertaalt programma naar machinetaal instructies (machine code) Programma Input Machine Code Output Compiler
Vertalen van programma’s (2) Interpreter Voert de programma instructies uit door middel van machinetaal instructies Programma Input Interpreter Output “De programma uitvoer” Vb. Hallo iedereen
Vertalen van Java programma’s Combinatie van compiler en interpreter Java compiler vertaalt Java programma niet naar machinetaal maar naar een “neutrale” soort van machinetaal, Java byte code genoemd Java Compiler Java bytecode bestand Java Programma bestand
Stap 3: Vertaling uitvoeren Java byte code kan niet direct uitgevoerd worden Interpreter nodig Java bytecode bestand Java byte code Interpreter “De programma uitvoer” Vb. Hallo iedereen
Dus alles samen Java Editor X.java Java Compiler X.class Het programma compileren Het programma invoeren Java Bestand X.java Java Editor Java Compiler Java bytecode Bestand X.class Het programma uitvoeren Java byte code Interpreter “De programma uitvoer”
Voordelen Java byte code is niet machine afhankelijk Dus compiler niet machine afhankelijk Java byte code interpreters eenvoudiger dan Java interpreters
Hoofdstuk 2: Objecten nader bekeken
Referenties en objecten Referentie naar een object Object Object Toestand Kleur: blauw Merk: Opel Nummerplaat: ARJ775 Gedrag Rijden Remmen Toeteren MijnAuto “Het object MijnAuto” is eigenlijk een afkorting van “het object waarnaar MijnAuto refereert”
Identifiers Naam van een klasse start met een hoofdletter, bvb. PrintStream Naam van methode start met kleine letter, bvb. println Alle andere letters zijn kleine letters, behalve indien naam bestaat uit meerdere woorden, bvb. printStream
Formaat van methoden methodenaam(argument-1, argument-2, ...) println(“Java”) methodenaam argument
Methode print Methode print voor de klasse PrintStream Geen nieuwe lijn na afdrukken van het argument: System.out.print(“Ja”) System.out.print(“va”)
Strings Een string is een opeenvolging van karakters (letters, cijfers, leestekens, …) Bvb. “Welkom iedereen” In Java wordt de string zelf gebruikt om naar een string object te refereren. Dit zijn String Constanten “hello” Object: instance van de klasse String
De klasse String Methoden van String Wijzigen de ontvanger (object) niet Geven steeds een referentie naar een nieuw String object terug Bvb: toUpperCase() Geen argumenten Bvb: “ibm”.toUpperCase() ; “IBM” reference naar nieuw String object System.out.println(“ibm”.toUpperCase());
Signatuur en prototype Signatuur van een methode Naam methode en beschrijving van de argumenten vb: klasse PrintStream methode println argumenten: referentie naar String object
Signatuur en prototype (2) Prototype van een methode Signatuur en beschrijving van de “return” waarde vb1: klasse PrintStream methode println argumenten: referentie naar String object return waarde: geen vb2: klasse String methode toUpperCase argumenten: geen return waarde: referentie naar String object
Variabelen Een variabele Heeft een naam (identifier) Bvb x, lijn, mijnVariabele Kan een waarde hebben Bvb x heeft de waarde 5 Waarde kan wijzigen Grafische voorstelling Naam van de variabele x 5 Inhoud (of waarde) van de variabele
Variabelen (2) De waarde van een variabele kan men opvragen Door middel van de naam van de variabele x 5 … x ... geeft waarde van x, namelijk 5
Variabelen (3) Bij uitvoering beschikt het programma over een stuk van het computer geheugen Een variabele is een stukje van dit computer geheugen x Kan men het gebruiken om “iets te bewaren” Vb (tussen)resultaat van een berekening Waarden opgeslagen via variabelen verdwijnen wanneer de uitvoering van het programma stopt.
Referentie Variabelen Een referentie variabele Is een variabele De waarde is een referentie naar een object Laat toe om referenties naar objecten te bewaren voor later gebruik Inhoud (of waarde) van de variabele Naam van de variabele y
Referentie Variabelen (2) Voorbeeld gebruik referentie variabele Bvb lijn heeft de waarde “youhou youhou youhou” lijn “youhou youhou youhou” Opvragen van de waarde van de referentie variabele Gebruik: System.out.println(lijn); System.out.println(lijn); System.out.println(lijn.toUpperCase());
Declaraties Een declaratie is een statement dat een variabele introduceert in het programma Formaat: type naam-variabele; Voorbeelden: String groeten; int x; naam type groeten naam type x
Assigment (Toekenning) Het toekennen van een waarde aan een variabele Formaat: naam-variabele = waarde ; Vb-en: x = 5 ; x 5 groeten = “Hallo” ; groeten “Hallo”
Assigment (2) Een variabele kan pas worden gebruikt nadat ze werd gedeclareerd Vb1: int x; x = 5 ; System.out.println( x ); x 5 Vb2: String groeten; groeten = “Hallo”; System.out.println( groeten ); groeten “Hallo”
Assignment: regel Type van waarde moet hetzelfde zijn als type van de variabele Type van de variabele String groeten; groeten = “Hallo”; String groeten; groeten = 5 ;
Assignment met waarde toekenning Het toekennen van een waarde aan een variabele tijdens de deklaratie Formaat: type identifier = waarde ; Vb: String groeten = “Hallo”; int x = 5 ;
Meer over variabelen Meerdere variabelen in één declaratie Conventie: type naam-variabele1, naam-variabele2, … ; Vb: String groeten, naam, lijn ; int i, j, k ; Conventie: Variabele namen starten met kleine letter
Meer over variabelen (2) Na declaratie en voor de eerste toekenning is de waarde van een variabele onbepaald int x ; x x = 10; 10 5 x = 5; Een variabele kan op één moment maar één waarde bevatten.
Meer over variabelen (3) Een referentie variabele kan op één moment naar slechts één object refereren. Referentie naar “herfst” is weg! String t ; t String t ; t = “herfst” ; t = “winter” ; t “herfst” “winter” t “herfst” String t ; t = “herfst” ;
Waarde van een variabele wijzigen Waarde wijzigen gebaseerd op de huidige waarde int i ; i = 3; i 3 12 Resultaat (12) toekennen aan i Resultaat berekenen : 3 * 4 = 12 i = i * 4; Waarde opvragen : 3
Null Het sleutelwoord null kan men gebruiken om aan te geven dat een referentie variabele nergens naar refereert t String t ; null t = null ;
Meer over variabelen (3) Verschillende variabelen kunnen dezelfde waarde bevatten. int i, j ; i = 5 ; i j 5 5 j = i ; j wordt hier gebruikt om de variabele j een waarde te geven i wordt hier gebruikt om de waarde van de variabele i op te vragen
Meer over variabelen (4) Verschillende referentie variabelen kunnen naar hetzelfde object verwijzen. t “herfst” String s, t ; t = “herfst” ; s s = t ; s wordt hier gebruikt om de variabele s een waarde te geven t wordt hier gebruikt om de waarde van de variabele t op te vragen
Meer over variabelen (4) (Referentie) variabelen zijn onafhankelijk int i, j; i = 5 ; j = i ; i = 10 ; int i, j; i = 5 ; int i, j; i = 5 ; j = i ; i j 5 5 10 String s, t ; t = “herfst” ; s = t ; t = “winter” ; t “herfst” s “winter” s = t ; String s, t ; t = “herfst” ; t “herfst” s
Meer over statements Volgorde van de statements is belangrijk Cf echte leven Niet: eerst ei in pan en dan pan verwarmen Plaats van declaraties niet belangrijk zolang ze voor het gebruik ervan komen import java.io.*; class Programma2 { public static void main ( String [] arg) { String groeten ; groeten = “groeten” ; String veelGroeten ; veelGroeten = “veel groeten” ; System.out.println( groeten ); System.out.println( veelGroeten ); }
String Methoden - voorbeelden
String Methoden (2) Positie van karakters in een String begint bij 0! h a m b u r g e r 0 1 2 3 4 5 6 7 8 Eerste karakter Positie 0 Vierde karakter Positie 3
String Methoden String s, t, u ; s = “ham”; t = “burger”; u = s.concat( t ); “hamburger”
String Methoden (2) String s, t, u ; s = “hamburger”; 0 1 2 3 4 5 6 7 8 t s “hamburger” u t = s.substring(3) “burger” Positie van begin van rest string “burg” u = s.substring(3 , 7) Laatste positie niet in substring
Overloading Twee verschillende methoden? Dit noemt men “overloading” String s,t,u ; s = “hamburger”; t = s.substring(3); u = s.substring(3, 7); Twee verschillende methoden? Ja! Dezelfde naam Maar verschillende signatuur dus te onderscheiden Dit noemt men “overloading”
Voorbeeld gebruik van strings - 1 Vind het middelste karakter van de string “hottentottententoonstelling” Wat nodig? Variabele voor het woord String woord = “hottentottententoonstelling”; Variabele voor het middelste karakter; kararkter is ook een string String midden ; (later zien we ook karakters)
Hoe het middelste karakter vinden? Middelste karakter op middelste positie Hoe de middelste positie vinden? vb: “nooit” lengte: 5 middelste positie: 2 (opgelet nummering begint bij 0) n o o i t 0 1 2 3 4 Dus middelste positie is lengte gedeeld door 2: woord.length() / 2
Hoe karakter op middelste positie eruit halen? Via substring methode: woord.substring(“middelste positie”, “ 1 + middelste positie”) Of dus: woord.substring(woord.length () / 2, 1 + woord.length () / 2 )
Alles samen import java.io.*; class Programma1 { public static void main(String[] arg) { String woord, midden ; woord = “hottentottententoonstelling” ; midden = woord.substring( woord.length () / 2, 1 +woord.length () /2 ); System.out.println(midden); }
Voorbeeld 2 Gegeven zijn een voornaam en een achternaam. Druk de initialen van deze naam af. Wat nodig? Variabelen voor het voornaam en achternaam String voornaam, achternaam ; Variabele voor de initialen String initialen ;
Hoe initialen vinden? Hoe samenvoegen ? Eerste karakter van elke naam voornaam.substring(0, 1); J a n achternaam.substring(0, 1); P e e t e r s Nog nodig, dus referentie bijhouden door middel van variabelen String eersteInit, tweedeInit; eersteInit = voornaam.substring(0, 1); tweedeInit = achternaam.substring(0, 1); tweedeInit eersteInit “P” “J” Hoe samenvoegen ? Via concat methode initialen = eersteInit.concat(tweedeInit); initialen “JP”
Alles samen import java.io.*; class Programma1 { public static void main(String[] arg) { String voornaam, achternaam, initialen ; voornaam = “Jan” ; achternaam = “Peeters” ; String eersteInit, tweedeInit ; eersteInit = voornaam.substring( 0, 1 ); tweedeInit = achternaam.substring( 0, 1 ); initialen = eersteInit. concat(tweedeInit) ; System.out.println(initialen); }
Cascading Veronderstel in voorbeeld2: voornaam, middelnaam en achternaam Jan Geert Peeters Dan 3 initialen: eersteInit, tweedeInit en derdeInit initialen = eersteInit.concat(tweedeInit); initialen = initialen.concat(derdeInit); “JG” “JGP” Of eersteInit.concat(tweedeInit) initialen = .concat(derdeInit); is een object Dus we kunnen er een boodschap naar sturen
Compositie Nog anders: Of initialen = tweedeInit.concat(derdeInit); initialen = eersteInit.concat(initialen); “GP” “JGP” Of tweedeInit.concat(derdeInit) initialen = eersteInit.concat( ) is een object Dus we kunnen het gebruiken als argument van een boodschap
Lege string String zonder karakters Lengte van een lege string is 0 “” Lengte van een lege string is 0 Is verschillend van null
Zelf objecten maken Een object is een instantie van een klasse String constanten, System.out zijn voorbeelden van voorgedefinieerde objecten. Een object is een instantie van een klasse Elke klasse heeft een methode om nieuwe instanties te maken Deze methode wordt een constructor genoemd Naam van een constructor is steeds gelijk aan de naam van de klasse bv: klasse Auto è constructor: Auto
Zelf objecten maken (2) Nieuwe instantie van een klasse maken door het sturen van een boodschap naar de klasse Geen object-ontvanger Object-ontvanger vervangen door het sleutelwoord new new Auto() Nieuw object van het type Auto Constructor Een constructor kan argumenten hebben Bv: new Auto (“Ford”)
Zelf objecten maken (3) Referentie naar nieuw object nodig! Auto mijnAuto ; mijnAuto mijnAuto = new Auto() ;