Informatica Deel II: les 1 Java versus Python Jan Lemeire Informatica deel II februari – mei 2015 Parallel Systems: Introduction Arabidopsis (zandraket) Arabidopsis (zandraket) MMIQQA Multimodal Microscopic Imaging: Quality, Quantification and Acceleration The third pillar of the scientific world: computational science 9/02/2015 9 Informatica = tool Jan Lemeire ([email protected]) • Burgerlijk ingenieur, 1994, VUB + bijkomende masters in de computerwetenschappen (1995) • Werkte 4 jaar in de privé, voor 2 IT-consultancy companies • 2000-2007: doctoreerde aan de VUB als assistant – Gaf oefeningen informatica • Sinds 2008: professor aan VUB – Vak ‘parallel systems’ in de masters – Sinds 2011: titularis ‘Informatica’ eerste bachelors • Sinds oktober 2013: geeft ook les aan industrieel ingenieurs – Computerarchitectuur, operating systems, gevorderde programmeertechnieken • Onderzoeksdomeinen: parallel processing & data mining/machine learning/probabilistische modellen • http://parallel.vub.ac.be + Eerste semester Algoritmes Recursie Maken van een eigen functie Maken van een while-lus Gebruiken van lijsten Maken van een for-lus Variabelen 2e semester Boek: Java de basis - Andree Hollander Cursustekst deel II Cursustekst deel III Slides: alles staat in cursus Indien niet: staat duidelijk aangegeven Code http://parallel.vub.ac.be: alle info Informatica II: les 1 Jan Lemeire Pag. 13 / 40 1e semester Basis programmeervaardigheden While – for Lijsten/arrays Functies Recursie Datastructuren Arrays – ArrayLists Stack, Queue, Linked lists trees - maps Algoritmen Numerieke algoritmen: nulpunten, sorteren Zoekalgoritmen Object-georiënteerd programmeren Regels Organisatie van de code Gebruik klasses Pijlers • • • • Beheers het gebruik van bibliotheken: Programmeervaardigheden PROJECT Klassestructuur Voorbeelden Documentatie GUI-klassen JFrames – Jpanels – Jbuttons - … Events – Eventlisteners - mouse Paint, layout, JApplet Utility-klassen Timer, Thread, Random, File, … THEORIE III: technologie, historiek en economische aspecten Deze cursus: kennis & vaardigheden • • • • Nieuwe ‘taal’ onder de knie krijgen Nauwkeurigheid Debuggen – problemen oplossen Doorzettingsvermogen • Brede vorming – Alhoewel kans groot is dat je met programmeren in aanraking komt Informatica II: les 1 Java versus Python 1. 2. 3. 4. 5. 6. 7. 8. 9. Object-georiënteerde taal. public static void main Puntkomma’s en accolades System.out.println Typeren: sterk en statisch Arrays en ArrayLists Verschil tussen letters en woorden De for-lus Varia Informatica II: les 1 Jan Lemeire Pag. 16 / 40 Informatica II: les 1 Jan Lemeire Pag. 17 / 40 Wat berekent GHI?” Informatica II: les 1 Jan Lemeire Pag. 18 / 40 p. 6 GGD in python def berekenGGD(x, y): while x != y: if x > y: x = x-y else: y = y-x return x; s = raw_input("Geef 2 getallen: ") a = int(s) s = raw_input() b = int(s) ggd = berekenGGD(a, b) print “GGD van", a, "en", b, "is", ggd Informatica II: les 1 Jan Lemeire Pag. 19 / 40 p. 8 Getypeerde parameters public static int berekenGrootstGemeneDeler(int x, int y) Java: Enkel op te roepen met integers In python: ook reëel getal mogelijk! Elk type, dus ook string… – Parameters 4.5 & 5.5 werkt – Parameters 4.5 en 5.1 werkt het niet NOK Informatica II: les 1 Jan Lemeire Pag. 20 / 40 Type checking nuttig Je weet als gebruiker wat mee te geven In python: input documenteren Geruststelling, je kan ‘niets fouts’ doen Hier: negatieve waarden geeft fouten: checken In Python: steeds extra checks doen op type Parameters kunnen ingewikkelde objecten zijn Informatica II: les 1 Jan Lemeire Pag. 21 / 40 p. 11 Functie: maar 1 teruggeefwaarde Java, zoals de meeste programmeertalen Functie kan maar 1 waarde teruggeven Voorbeeld: celsius-conversie, ggd Indien meerdere waarden: ‘truken’ nodig Informatica II: les 1 Jan Lemeire Pag. 22 / 40 Voorlopige Voorlopige conclusie conclusie Python Snel, voor kleine programma’s High-level, handige basisfunctionaliteiten Cf Matlab Java Voor grote programma’s en bibliotheken, te delen met andere programmeurs Iets meer low-level Meest-gebruikte industriële taal Informatica II: les 1 Jan Lemeire Pag. 23 / 40 Java versus Python 1. 2. 3. 4. 5. 6. 7. 8. 9. Object-georiënteerde taal. public static void main Puntkomma’s en accolades System.out.println Typeren: sterk en statisch Arrays en ArrayLists Verschil tussen letters en woorden De for-lus Varia Informatica II: les 1 Jan Lemeire Pag. 24 / 40 Objecten Persoon-object Informatica II: les 1 Jan Lemeire Pag. 27 / 40 p. 13 Informatica II: les 1 Jan Lemeire Pag. 28 / 40 p. 14 Persoonobjecten Informatica II: les 1 Jan Lemeire Pag. 29 / 40 Objecten Gedefinieerd met een klasse (type object) Heeft attributen De eigenschappen van het object Aangemaakt met een constructor Object is instantiatie van een welbepaalde klasse Heeft methodes Methode heeft toegang tot de attributen, kan deze veranderen Informatica II: les 1 Jan Lemeire Pag. 30 / 40 Student-voorbeeld Jan Lemeire Pag. 31 / 40 p. 16 Informatica II: les 1 Jan Lemeire Pag. 32 / 40 Overerving Jan Lemeire Pag. 33 / 40 public class Student extends Persoon{ enum Faculteit {IR, WE, GF, LK, LW, ES, RC, PE}; int rolnummer; Faculteit faculteit = Faculteit.IR; Vak[] vakken; int[] punten; float score; } Student(String voornaam, String naam, int rolnummer){ super(voornaam, naam); this.rolnummer=rolnummer; vakken = new Vak[4]; } public class Vak { String naam, titularis; int SP; Vak(String naam, String titularis, int SP){ this.naam = naam; this.titularis = titularis; this.SP = SP; } } Informatica II: les 1 Jan Lemeire Pag. 34 / 40 Aanmaken objecten /** PROGRAMMA */ public static void main(String[] args) { Student rik = new Student("Rik", "Vermeulen", 37365); Student jana = new Student("Jana", "Laplace", 101670); Vak informatica = new Vak("Informatica", "Jan Lemeire", 7); Vak materiaalkunde = new Vak("Materiaalkunde", "Herman Terryn", 4); Vak mechanica = new Vak("Mechanica", "Dirk Lefeber", 7); rik.vakken[0] = informatica; rik.vakken[1] = materiaalkunde; jana.vakken[0] = materiaalkunde; jana.vakken[1] = mechanica; } Informatica II: les 1 Jan Lemeire Pag. 35 / 40 Berekening score int berekenTotaal(){ score=0; int totaalSP=0; for(int i=0;i<vakken.length;i++){ if (vakken[i] != null){ score += punten[i] * vakken[i].SP; totaalSP += vakken[i].SP; } } score /= totaalSP; return score; } Informatica II: les 1 Jan Lemeire Pag. 36 / 40 Overerving (inheritance) Subklasse erft alle attributen en methodes over van moederklasse Subklasse kan attributen toevoegen Subklasse kan methodes toevoegen of methodes overschrijven Constructor van subklasse moet een constructor van moederklasse oproepen (superconstructor) Informatica II: les 1 Jan Lemeire Pag. 37 / 40 Overerving (Inheritance): hiërarchie Vehicle Generalizatie Light Vehicle Heavy Vehicle Car Truck Bus Racing Car Specializatie Jan Lemeire Pag. 38 / 40 p. 3 Pijlers van object-georiënteerde programmeertalen Encapsulatie 2.4 Conclusies ArrayList versus array p. 45 3.2 Stapel-datastructuur p. 50 6.2 Java’s LinkedList p. 88 7.8.2 AVL-boom p. 110 Overerving (inheritance) 4.3 FunctieMetAfgeleide-interface p. 60 - 61 7.8.4 AVLTree subklasse p. 113 Polymorfisme en abstractie 4.2 Functie-interface p. 55 9.6 Mapimplementaties p. 116 Addendum bij hoofdstuk 5 (zie website) Abstract zoekalgoritme Vergelijking van zoekalgoritmes Informatica II: les 1 Jan Lemeire Pag. 39 / 40