Sivu täydentyy kurssin edetessä.
Kurssin harjoitustyönä opiskelijatyöryhmät laativat asteittain täydentyvän oman ohjeistuksensa siitä, millä tavoin JavaScript-kieltä olisi hyvä käyttää, millaiset rakenteet ja tyylit johtavat hyviin ohjelmiin. Ryhmät siis tuottavat ns. "Best Practices" -dokumentin.
Esitettyjen ratkaisujen ja mallien hyvää perustelu on töiden arvioinnin tärkein kriteeri. Verkkosivuna esitetyn dokumentin ulkoasun tyylikkyys ja mahdollinen "bling" ja "wow" eivät ole arvostelukriteerejä. Kannattaa siis panostaa perusteltuun sisältöön!
Joihinkin harjoitustilaisuuksiin tulee myös erillisiä kotitehtäviä.
läsnäolopisteitä: 5*2 = 10 harjoitustyöpisteitä: 3*3+1*5 = 14 koepisteitä: 36 ---- 60
Hyviä ohjelmointikäytäntöjä
Simuloi piirtäen seuraavien ohjelmien suoritus. Olioihin ohjelmoitujen kenttien lisäksi olioihin on piirrettävä näkyviin myös kentät __proto__, prototype ja constructor.
Selityksissä on käytettävä tarkasti terminologiaa, josta on sovittu (so. määrätty ;-) luvussa 7 Oliot! Hyväksyttyjä ja kurssillamme(!) täsmällisesti määriteltyjä käsitteitä ovat siis "funktion prototyyppiolio" ja "prototyyppi". Erityisesti ilmaus "prototyyppiolio" ilman mainintaa funktiosta ei tällä kurssilla – ei myöskään kokeessa! – tarkoita yhtään mitään, koska sen voi ymmärtää kahdella tavalla!
On selitettävä myös, millä tavoin itse piirretyt oliot linkittyvät neljään kielen "ylärakenteen" olioon: Object-funktioon, Object-funktion prototyyppiolioon, Function-funktioon ja Function-funktion prototyyppiolioon.
var retki = {matka: 150, aika: 2, nopeus: function() {return this.matka/this.aika} } write(retki.nopeus()); // 75
function Piste(x,y) { this.x = x; this.y = y; } Piste.prototype.tulo = function() {return this.x*this.y} var a = new Piste(3, 6) var b = new Piste(3.14, 2.8) write(a.y) write(b.tulo())
function Tuote(numero, pituus) { this.numero = numero this.pituus = pituus } Tuote.prototype.id = 0; Tuote.prototype.cd = {a:8, b:17} var x = new Tuote(23, 45) var y = new Tuote(9, 5) write(y.numero) x.pituus = 77 write(y.pituus) x.cd.b = 88 write(y.cd.b) x.cd = "kissa"
function Employee () { this.name = "NN"; this.dept = 0; } function WorkerBee () { this.report = "-"; } WorkerBee.prototype = new Employee(); var mark = new WorkerBee() mark.name = "Mark" mark.dept = 12 function Engineer () { this.dept = "engineering"; this.machine = "comp"; } Engineer.prototype = new WorkerBee(); var jane = new Engineer() jane.report = "spec"
function Elain() { this.paino = 0 } Elain.prototype.asetaPaino = function (maara) {this.paino=maara} Elain.prototype.syo = function (maara) {this.paino+=maara} Elain.prototype.kuluta = function (maara) {this.paino-=maara} function Tuotantoelain() { this.tuotto = 0 } Tuotantoelain.prototype = new Elain() Tuotantoelain.prototype.asetaTuotto = function (maara) {this.tuotto=maara} Tuotantoelain.prototype.tuota = function () {return this.tuotto} function Lehma(nimi) { this.nimi = nimi || ""; // kelvoton nimi => tyhjäksi } // (tämä on JavaScript-idiomi!) Lehma.prototype = new Tuotantoelain() Lehma.prototype.toString = function () { return this.nimi+ ": "+this.paino+" Kg, "+ this.tuotto+" litraa" } var m = new Lehma("Mansikki") var p = new Lehma("Muurikki") m.asetaPaino(100) p.syo(22) m.kuluta(12) p.asetaTuotto(33) write(p.tuota()) write(m.tuota()) write(m) write(p)