Muuttujien roolit ohjelmoinnin opettamisessa. Jorma Sajaniemi



Samankaltaiset tiedostot
Ohjelmointikoulutuksen tehostaminen kognitiivisilla menetelmillä

Muuttujien roolit Kiintoarvo cin >> r;

1. Olio-ohjelmointi 1.1

2. Olio-ohjelmoinista lyhyesti 2.1

Tyyppiluokat II konstruktoriluokat, funktionaaliset riippuvuudet. TIES341 Funktio-ohjelmointi 2 Kevät 2006

4. Olio-ohjelmoinista lyhyesti 4.1

Olio-ohjelmointi Javalla

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Tehostettu kisällioppiminen tietojenkäsittelytieteen ja matematiikan opetuksessa yliopistossa Thomas Vikberg

Mikä yhteyssuhde on?

Java-kielen perusteet

812336A C++ -kielen perusteet,

Javan perusteita. Janne Käki

Rajapinta (interface)

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

1 Tehtävän kuvaus ja analysointi

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Listarakenne (ArrayList-luokka)

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

UML ja luokkien väliset suhteet

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Pariohjelmoinnilla lisää mielekkyyttä ohjelmoinnin opetukseen? Annika Alakastari

P e d a c o d e ohjelmointikoulutus verkossa

TIE Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

15. Ohjelmoinnin tekniikkaa 15.1

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

19/20: Ikkuna olio-ohjelmoinnin maailmaan

TIETORAKENTEET JA ALGORITMIT

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Jakso 4 Aliohjelmien toteutus

Opettajan pedagoginen ajattelu

Muuttujien roolit noviisien kirjoittamissa C- kielisissä ohjelmissa

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Ohjelmistotekniikan menetelmät, koe

1. Omat operaatiot 1.1

15. Ohjelmoinnin tekniikkaa 15.1

Luento 4 Aliohjelmien toteutus

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

Java kahdessa tunnissa. Jyry Suvilehto

4. Luokan testaus ja käyttö olion kautta 4.1

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Ohjelmoinnin peruskurssien laaja oppimäärä

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Ohjelmointi 2 / 2010 Välikoe / 26.3

Antti-Jussi Lakanen Ohjelmointi 1, C# / kevät 2011

16. Javan omat luokat 16.1

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Ohjelmoinnin jatkokurssi, kurssikoe

18. Abstraktit tietotyypit 18.1

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Muuttujien roolit ohjelmistoasiantuntijoiden kirjoittamissa Java-ohjelmissa

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Olio-ohjelmointi Syntaksikokoelma

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

Sopimuspohjainen olio-ohjelmointi

Sisältö. 22. Taulukot. Yleistä. Yleistä

815338A Ohjelmointikielten periaatteet

19. Olio-ohjelmointia Javalla 19.1

RINNAKKAINEN OHJELMOINTI A,

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Trialogisen oppimisen suunnitteluperiaatteet

KOHDELUOKAN MÄÄRITTELY


Ohjelmoinnin perusteet Y Python

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

Tietorakenteet ja algoritmit. Kertaus. Ari Korhonen

Näkökulmia tietoyhteiskuntavalmiuksiin

public static void main (String [] args)

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Tutoriaaliläsnäoloista

REKURSIO. Rekursiivinen ohjelma Kutsuu itseään. Rekursiivinen rakenne. Rakenne sisältyy itseensä. Rekursiivinen funktio. On määritelty itsensä avulla

Jakso 4 Aliohjelmien toteutus

Luokan sisällä on lista

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Sisältö. 2. Taulukot. Yleistä. Yleistä

Yhteydelle voi antaa nimen kumpaankin suuntaan Sille ei tarvise antaa lainkaan nimeä Yhteysnimen asemasta tai lisäksi voidaan käyttää roolinimiä

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Metodien tekeminen Javalla

TAMPEREEN TEKNILLINEN YLIOPISTO

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Osoitin ja viittaus C++:ssa

Java-API, rajapinnat, poikkeukset, UML,...

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Kielioppia: toisin kuin Javassa

KÄYTTÄJÄKOKEMUS & KÄYTTÖLIITTYMÄSUUNNITTELU. CSE- C3800, Aalto , Eeva Raita

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet

Luento 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

Vastuuopettaja. Kurssiesite Olio-ohjelmoinnin perusteet Kevät Olio-ohjelmoinnin perusteet (5 op) Tavoitteena

Transkriptio:

Muuttujien roolit ohjelmoinnin opettamisessa Jorma Sajaniemi Joensuun yliopisto Tietojenkäsittelytiede Jorma.Sajaniemi@Joensuu.Fi Johdanto Roolikäsite Roolit ja opiskelijat Roolit ja ammattilaisohjelmoijat Roolit alkeisohjelmoinnin opettamisessa Roolit muussa opettamisessa Rekursio ja roolit Yhteenveto Viitteet Johdanto Ohjelmoinnin oppiminen on monille opiskelijoille todella vaikeaa uusi abstrakti maailma uusia käsitteitä, joiden väliset suhteet eivät aukea Muuttujien roolit muuttujien stereotyyppisiä käyttötapoja, jotka toistuvat ohjelmissa yhä uudelleen hyvin pieni joukko riittää kattamaan lähes kaikki muuttujat eksperttiohjelmoijien hiljaista tietoa, joka voidaan tuoda esiin aloittelijoille helposti omaksuttavassa muodossa havaittu parantavan oppimistuloksia merkittävästi Roolikäsite Muuttujien roolit: (Sajaniemi, 2002; Sajaniemi ym., 2006) laskuri, tmp: entuudestaan tuttuja muuttujien käyttötapoja (käyttäytymistapoja!) roolit: edellisten yleistys; täysi kattavuus Laskuri i:=0... i:=i+1 yleistys askeltaja Juokseva summa rainsum:=0... rainsum:=rainsum+rain yleistys kokooja

11 roolia kattaa 99 % noviisitason ohjelmien muuttujista sanasto ohjelmista puhumiseen; mentaalinen apuväline ohjelmien suunnitteluun ohjelmointitietämystä (vrt. ohjelmointikielitietämys tai ohjelmatietämys) jota voidaan opettaa eksplisiittisesti opiskelijoille Noviisitason ohjelmissa esiintyvät roolit: Rooli Esimerkki Kattavuus Kiintoarvo Askeltaja Tuoreimman säilyttäjä Sopivimman säilyttäjä Kokooja Seuraaja Yksisuuntainen lippu Tilapäissäilö Järjestelijä Säiliö Kulkija maxstringlength count inputdata maximum sum prev errorsoccurred temp sortarray processqueue currnode 99 % Muu tabpos 1 % Kattaa olio-ohjelmoinnin, proseduraalisen ohjelmoinnin ja funktionaalisen ohjelmoinnin Esimerkki: program doubles; var data, count, value: integer; begin end. repeat write('enter count: '); readln(data) until data > 0; count := data; while count > 0 do begin write('enter value: '); readln(value); writeln('two times ', value, ' is ', 2*value); count := count - 1 end data count value tuoreimman säilyttäjä askeltaja tuoreimman säilyttäjä Olio-ohjelmointi: rooleja annetaan muuttujille, parametreille, attribuuteille ja olioille, jotka kapseloivat yhden käsitteellisen attribuutin

public class Dog { String name; // Kiintoarvo: koiran nimi int age; // Askeltaja: nykyinen ikä vuosissa public Dog (String n) { name = n; age = 0; public void birthday () { age++; name age n kiintoarvo askeltaja kiintoarvo Funktionaalinen ohjelmointi: roolit kuvaavat parametrien ja palautusarvojen käyttäytymistä rekursiossa fun max(a, nil) = a max(a, (h::t)) = if h>a then max(h,t) else max(a,t) a sopivimman säilyttäjä h tuoreimman säilyttäjä t kulkija max:in palautusarvo kiintoarvo (rekursiosta lisää myöhemmin) Roolimuutokset: repeat write('enter count: '); readln(count) until count > 0; while count > 0 do begin... count := count - 1 end tuoreimman säilyttäjä askeltaja

Roolit ovat kognitiivinen (eikä tekninen) käsite: Fibonacci-sarja (1, 1, 2, 3, 5, 8, 13,...): kokooja vaiko askeltaja? keskustelut muuttujan mahdollisista rooleista selventävät ohjelman toimintaa ja syventävät ymmärrystä! roolit ovat ohjelmien suunnittelun ja ymmärtämisen mentaalinen apuväline roolit antavat terminologian ohjelmista keskustelemiseen Roolit ja opiskelijat (Sajaniemi ja Kuittinen, 2005; Byckling ja Sajaniemi, 2005, 2006) 91 opiskelijaa Pascal-kielen alkeiskurssilla kolme opetustapaa: Ryhmä Luennot Animointi harjoituksissa Traditional Ei rooleja Roles Roolit käytössä Ei rooleja (Turbo Pascal debugger) Ei rooleja (Turbo Pascal debugger) Animation Roolit käytössä Roolit käytössä (PlanAni) Ohjelmien mentaaliset esitykset (loppukoe):

(p=0.0046) Pariohjelmointi: ei-triviaali ohjelmointitehtävä kuvan ja puheen tallennus videolle 3-4 opiskelijaparia kussakin ryhmässä Ohjelmointitietämys:

Ohjelmointitietämyksen soveltaminen: Roolinimien käyttö loppukokeessa:

35 % opiskelijoista sekä rooliryhmässä että animointiryhmässä käytti roolinimiä vastauksissaan roolinimet yleensä oikein; virheitä teki kaksi rooliryhmän opiskelijaa Roolit ja ammattilaisohjelmoijat (Sajaniemi ja Navarro Prieto, 2005) Empiirinen tutkimus, jossa selvitettiin eksperttiohjelmoijien muuttujiin liittyvää tietämystä. Viisi ohjelmaa, joissa 30 muuttujaa. Tehtävänä perehtyä ohjelmiin ja tehdä kuhunkin yksinkertainen muutos, jonka jälkeen korttien ryhmittely haastattelu Osallistujat: 13 ohjelmoinnin ammattilaista (mediaani 15 vuotta ohjelmointikokemusta) Ryhmittelyperusteet (käytetty tai mainittu):

Hierarkkinen klusterianalyysi:

Roolit ovat kognitiivinen käsite --- ihmisten välisillä eroilla kaksi lähdettä: mikä käyttäytyminen aistitaan mitä käyttäytymisiä pidetään samanlaisina on OK olla eri mieltä! Roolit alkeisohjelmoinnin opettamisessa (Kuittinen ja Sajaniemi, 2004) Roolien väliset suhteet: Roolitietämyksen luonti tuo roolit esiin yksi kerrallaan sitä mukaa kuin ne esiintyvät ohjelmissa selitä roolin tärkeimmät ominaisuudet (ts. käyttäytyminen = rooli) kuvaa roolin tyypillisiä hyödyntämistapoja (ts. käyttö) selitä olennaiset erot aiemmin opittuihin rooleihin (tiedon konstruktiivinen rakentuminen) anna tiivis yhteenvetopaketti (linkki)

=> luentoihin tarvittavat muutokset ovat minimaalisia! tai: perusta ohjelmien käsittely kokonaan rooleille (linkki) (Tedre, 2006) Roolitietämyksen vahvistaminen roolien käyttö mielekkäällä tavalla: kehoitetaan oppilaita ajattelemaan rooleja aktiivisesti omia ohjelmiaan tehdessään roolinimet mielekkäissä yhteyksissä: #include <stdio.h> int data, /* tuoreimman säilyttäjä: kierrosten lukumäärä */ count, /* askeltaja: silmukkalaskuri */ value; /* tuoreimman säilyttäjä: kaksinkertaistettava luku */ mielekkäät keskustelut opiskelijoiden kanssa yksittäisten muuttujien rooleista roolikuvat mielekkäinä metaforina roolipohjainen ohjelmien animointi (Sajaniemi ja Kuittinen, 2004), roolien näytteleminen (Timcenko, 2006),... Roolitietämyksen käyttö ohjelmointistrategioiden opettamisessa Roolipohjainen ohjelmien suunnittelu: Poimi tehtäväksiannosta: mitä rooleja (ja siis attributteja) tarvitaan olioiden mallintamiseen mitä rooleja (ja siis muuttujia) tarvitaan toimintojen tekemiseen mitä parametreja tarvitaan ulkopuolelta tulevien tietojen vastaanottamiseen Kirjoita ohjelman runko (luokkamäärittely / ohjelman vakio-osat) ja sijoita siihen edelläsaatujen attribuuttien ja muuttujien esittelyt Hahmottele toiminnot (muodostaja, metodit, pääohjelma) roolien tyypillisten käyttötapojen avulla Täydennä puuttuvat yksityiskohdat (Esimerkki seuraavalla kalvolla) Huom: Roolipohjaisuus ei auta ohjelman moduulirakenteen (luokat, metodit, proseduurit) suunnittelussa! Roolipohjainen sunnittelu on tarkoitettu ohjelmoinnin alkeiden opiskelun yhteyteen! Esim: Laadi valuuttalaskuri, jolle voidaan ilmoittaa uusi vaihtokurssi milloin tahansa ja joka tietää kaksi viimeisintä kurssitasoa. Laskurin tulee kertoa kulloinkin annettavan dollarisumman hinta euroina korkeamman kurssitason mukaisesti. Tehtäväksiannosta löytyy: nykyinen kurssitaso: olion tiedettävä => attribuutti, tuoreimman säilyttäjä edellinen kurssitaso: olion tiedettävä => attribuutti, seuraaja korkeampi kurssitaso: selvitetään paluuarvoa varten => muuttuja, sopivimman säilyttäjä hinta euroina: lasketaan paluuarvoa varten => muuttuja, tilapäissäilö

uusi vaihtokurssi: ulkopuolelta tuleva tieto => parametri annettava dollarisumma: ulkopuolelta tuleva tieto => parametri Runko ja toiminnot: public class Valuuttalaskuri {?näkyvyys??tyyppi? nykykurssi; // tuoreimman säilyttäjä: nykyinen kurssitaso?näkyvyys??tyyppi? edelkurssi; // seuraaja: edellinen kurssitaso public Valuuttalaskuri (?) { nykykurssi =?; edelkurssi =?; public asetakurssi (?tyyppi? uusikurssi) { edelkurssi = nykykurssi; nykykurssi = uusikurssi; public muunna (?tyyppi? dollarit) {?tyyppi? kurssi; // sopivimman säilyttäjä: korkeampi kurssi?tyyppi? eurot; // tilapäissäilö: summa euroina kurssi = nykykurssi; if (edelkurssi > kurssi) kurssi = edelkurssi; eurot =?laskenta? return eurot; Roolit muussa opettamisessa Roolien merkitseminen UML-kaavioihin: (Byckling ym., 2006)

: Muuttujapohjainen ohjelmointi "etydinä" (Sorva, 2007) etydi: ohjelmointitekniikan sisäistäminen viemällä sen käyttö äärimmäisyyksiin (Bergin, 2005) Esim: Kirjoita jokin oma ohjelmasi täysin ilman if/switch-rakenteita käyttämällä niiden tilalla polymorfismia Muuttujapohjainen ohjelmointi: (Sorva, 2007) Follower prev: inits to: 0 follows: curr Kehittää opettajan ohjelmointitaitoa Rekursio ja roolit Parametrien rooli useimmiten kiintoarvo. Rekursiossa rooli voidaan antaa

parametrin käyttäytymiselle yli rekursiivisten kutsujen palautusarvon käyttäytymiselle yli rekursiivisten kutsujen int sum (node n) { if (n == NULL) return 0; else return n->data + sum(n->next); n kulkija sum:in palautusarvo kokooja int factorial (int n) { if (n==0) return 1; else return n*factorial(n-1); n askeltaja factorial:in palautusarvo kokooja int factorial_2 (int m) { return fact_calc(m,1); int fact_calc (int n, int x) { if (n==0) return x; else return fact_calc(n-1, n*x); n askeltaja x kokooja fact_calc:in palautusarvo kiintoarvo Yhteenveto Roolit ja opiskelijat? Roolit ja ammattilaisohjelmoijat? Roolien käyttö opettamisessa! Lisää tietoa: www.cs.joensuu.fi/~saja/var_roles PlanAni ladattavissa ilmaiseksi samasta osoitteesta!

Viitteet Bergin J. (2005) Variations on a polymorphic theme: An Etude for Computer Programming. http://www.cs.umu.se/~jubo/meetings/ecoop05/submissions/bergin-full.pdf Byckling P., Gerdt P., Kuzniarz L., Sajaniemi J. (2006) Increasing Comprehensibility of Object Models: Making the Roles of Attributes Explicit in UML Diagrams. Nordic Journal of Computing 13(3), 149-161. Byckling P., Sajaniemi J. (2005) Using Roles of Variables in Teaching: Effects on Program Construction. P. Romero, J. Good, S. Bryant, E. A. Chaparro (eds.) Proceedings of the 17th Annual Workshop of the Psychology of Programming Interest Group (PPIG 2005). University of Sussex, U.K., 278-303. Byckling P., Sajaniemi J. (2006) Roles of Variables and Programming Skills Improvement. Proceedings of the 37th SIGCSE Tehnical Symposium on Computer Science Education (SIGCSE 2006), Houston, USA, March 2006, Association for Computing Machinery, 413-417. Kuittinen M., Sajaniemi J. (2004) Teaching Roles of Variables in Elementary Programming Courses. ITiCSE 2004, Proceedings of the 9th Annual Conference on Innovation and Technology in Computer Science Education, Leeds, UK, June 2004. Association for Computing Machinery, 57-61. Pennington N. (1987) Comprehension Strategies in Programming. G. M. Olson, S. Sheppard, E. Soloway (eds.) Empirical Studies of Programmers: Second Workshop. Ablex Publishing Company, 100-113. Rist R. S. (1989) Schema Creation in Programming. Cognitive Science 13, 389-414. Sajaniemi J. (2002) An Empirical Analysis of Roles of Variables in Novice-Level Procedural Programs. Proceedings of IEEE 2002 Symposia on Human Centric Computing Languages and Environments (HCC'02), Arlington, VA, September 2002. IEEE Computer Society, 37-39. Sajaniemi J., Ben-Ari M., Byckling P., Gerdt P., Kulikova Y. (2006) Roles of Variables in Three Programming Paradigms. Computer Science Education 16(4), 261-279. Sajaniemi J., Kuittinen M. (2004) Visualizing Roles of Variables in Program Animation. Information Visualization 3(3), 137-153. Sajaniemi J., Kuittinen M. (2005) An Experiment on Using Roles of Variables in Teaching Introductory Programming. Computer Science Education, 15(1), 59-82. Sajaniemi J., Navarro Prieto R. (2005) Roles of Variables in Experts' Programming Knowledge. P. Romero, J. Good, S. Bryant, E. A. Chaparro (eds.) Proceedings of the 17th Annual Workshop of the Psychology of Programming Interest Group (PPIG 2005). University of Sussex, U.K., 145-159. Sorva J. (2007) A Roles-Based Approach to Variable-Oriented Programming. Accepted to the 19th Annual Workshop of the Psychology of Programming Interest Group (PPIG07), July 2007, Joensuu, Finland. Tedre M. (2006) Johdatus ohjelmointiin. Luentomoniste, Joensuun yliopisto, Tietojenkäsittelytieteen ja tilastotieteen laitos. Timcenko O. (2006) Example of Using Narratives in Teaching Programming: Roles of Variables. 2nd Kaleidoscope Narrative SIG Workshop, Palermo, June 2006. Available at http://gaips.inesc-id.pt/kw-nle06/. Jorma.Sajaniemi@Joensuu.Fi