An Analysis of Microworlds to Support OO Teaching and Learning

Hassan Safadi

Examensarbete (20 poäng)

Institution för datavetenskap

Umeå universitet

1

1

Abstract

Teaching object technology has become a rapidly expanding activity, but is in many ways, still an experimental pedagogical task. It requires more than just a change of terminology; it requires a new way of thinking. The most difficult problem in teaching object-oriented programming is getting the learner to give up the global control that is common in procedural programs, and relay on the local knowledge of objects to accomplish their tasks. Programming practice, as an educational exercise is best learned in a playful environment, designed to illustrate programming concepts in the simplest possible setting. Microworlds are program systems that realize a new approach centered on the visualization of objects and their behaviors using a 2D/3D animations environment. The animation task provides a flexible and meaningful context for understanding object-oriented concepts such as class, object, method, and events. This thesis introduces a number of different Microworlds developed to meet the challenges of an objects-first approach by reducing the complexity of details that the novice programmer must overcome. Those Microworlds provide in various ways a software support for an objects-first strategy for teaching and learning object-oriented programming concepts. An objects-first strategy is by many authors considered the best way to help students master the complexities of object-oriented programming.

Three of the Microworlds presented in this thesis are chosen for a more detailed analysis and evaluation. The analysis is based on a number of predefined objectives characterizing an effective and easy to use program systems for the teaching and learning of programming concepts. A comparison is made between those three Microworlds to show things they have in common and others that differ among them. Furthermore, a brief conclusion is made to illustrate the advantages of each of those Microworlds used as a tool for teaching and learning programming concepts.

Sammanfattning

Objektorienterad utbildning saknar fortfarande bra verktyg för undervisningen av de grundläggande koncepten. Det material som används i undervisning av objektorientering har ofta sin fokus på syntax istället för de underliggande koncepten som objekt, klass, inkapsling. Microworlds har utvecklats för att övervinna det problemet genom att fokusera på objekt, deras egenskaper och interaktion mellan objekt. I det här arbetet presenteras ett antal Microworlds som i varierande utsträckning stöder en objects-first-strategi för introduktion av programmeringskoncept och tekniker. Dessa Microworlds är inriktade på visualiseringen av objekt och deras beteenden/interaktion i 2D/3D-animeringsmiljöer. Microworlds möjliggör genom sin animering av objekt en flexibel och meningsfull kontext som hjälper studenten att ”se” och lättare förstå objektorienterade koncept. Tre av de Microworlds som presenteras i det här arbetet väljs för ingående analys och utvärdering. De anses representera olika aspekter av Microworlds konceptet. Analysen görs utifrån ett antal fördefinierade mål som anses karaktärisera ett effektivt system för inlärning av objektorienterade koncept och tekniker.

1. Inledning

1.1. Syfte och metod

1.2 Disposition

2. Definitioner

2.1. Vad är kognitionsvetenskap?

2.2. Vad är objektorientering?

2.2.1. Grundläggande begrepp

2.2.2. Den objektorienterade utvecklingsprocessen

2.3. Vad är en Microworld?

3. Ansatser för undervisningen och inlärningen

3.1 Konstruktivism

3.2. Minimalism

3.3. Pedagogiska mönster

3.3.1. Early Bird Pattern

3.3.2. Spiral Pattern

3.3.3. Simple and Complete Patterns Step by Step

3.3.4. Design-Do-Redo-Redo (DDRR) Pattern

3.3.5. Lab-Discussion-Lecture-Lab (LDLL)

3.3.6. Mission Impossible

3.4. En ansats för en ny programmerings pedagogik

3.5. Kognitiva nivåer (Blooms taxonomi)

4. Elektronisk inlärning

4.1. Programspråket LOGO

4.2. StarLogo

4.2.1. StarLogosgränssnitt

4.3. LEGO/Logo

4.4. Microworlds LOGO

4.5. Buggles

4.5.1. Att skapa en Buggle

4.5.2. Bugglevärld

4.5.3. Egendefinierade metoder med parametrar

4.5.4. Rekursion

4.6. MOOSE Crossing

4.7. JkarelRobot

4.7.1. Karels Värld

4.7.2. Problem och lösningar

4.7.3. En vidareutveckling av Karel

4.7.4. Karels primitiva kommandon

4.7.5. Karels kontrollstruktur

4.7.6. Villkor som Karel kan upptäcka

4.7.7. ”Define” Satsen

4.8. Kara

4.8.1. Karas värld

4.8.2. Vidare utveckling av Kara

4.8.3. Användning av Kara

4.9. Alice

4.9.1. Användningen av Alice

4.9.2. Erfarenheter av Alice

4.9.3. Alices tillstånd och kommandon

4.9.4. Alices mekanismer

4.9.4. En vidareutveckling av Alice

4.9.5. Programspråket Python

4.10. Darwin

4.10.1. Darwins värld

4.10.2. Programspråket DULL

4.10.3. Programmering av kategorier (Species)

4.10.4. Darwins programkommandon

4.10.5. Att exekvera ett Darwinprogram

4.10.6. Att köra ett Darwinprogram

4.10.7. Darwins användning

5. Analyskriterier/Mål

5.1. Utgångspunkten för analysen

5.2. Analysmetoden

5.3. De konkreta målen som utgör grunden för analysen

6. Analys

6.1. JKarelRobot

6.1.1. Gränssnittet

6.1.2. Systemet

6.2. Kara

6.2.1. Gränssnittet

6.2.2. Systemet

6.3. Alice

6.3.1. Gränssnittet

6.3.2. Systemet

7. Diskussion

8. Sammanfattning

9. Tack

1

1. Inledning

Objektorientering har blivit ett vanligt begrepp inom systemutveckling. Undervisningen inom området kan, trots dess snabba expansion, fortfarande betraktas som en experimentell pedagogisk uppgift som inte bara kräver en ändring av terminologin, utan också kräver ett nytt tänkesätt. Detta gör att övergången från de traditionella ansatserna till objektorientering förblir en komplex och krävande uppgift. Undervisning och inlärning av den objektorienterade ansatsen blir därmed en svår process med många frågor som måste besvaras; t.ex. Hur skall de olika begreppen introduceras? När och i vilken omfattning skall designen presenteras? Trots att objektorienterat tänkande är enkelt och mycket naturligt, har det visat sig att implementeringen av objektorienterade koncept är ganska svårt att förstå. Objektorienterad undervisning och inlärning upplevs ofta som en svår pedagogisk process där flera relaterade begrepp vanligtvis måste redas ut samtidigt, även i de mest triviala exemplen.

I de flesta fall är objektorienterad undervisning en bottom up process, dvs. elementära begrepp presenteras, beroende på svårighetsgraden, ett efter ett och utan direkt relation till varandra. En djupare insyn i de olika begreppen och deras inbördes relationer presenteras ofta senare i ett skede där studenten, trots kunskaper i olika modulariserings metodiker, oftast inte har någon större insyn i systemutveckling. Studenten har dessutom i många fall ännu mindre möjlighet att förstå systemet i dess helhet.

Analys och design är viktiga aspekter i objektorienterad mjukvaruutveckling och måste introduceras i ett tidigt skede före programmeringen. Studenten måste kunna skaffa sig en allmän bild av logiken i systemet samt det förväntade resultatet av sitt arbete, dvs. ett körbart program. Före introduktionen av objektdesign är det viktigt med en fullständig introduktion av hela det objektorienterade paradigmet för att därigenom skapa en bra förståelse av objektmetodologin. Det mest effektiva sättet att bättre möjliggöra för objekttänkande är att uppmuntra studenten att tänka i termer av fysiska objekt. För att underlätta detta måste så mycket som möjligt av allt bekant material avlägsnas så att studenten snabbare och lättare skall kunna lära sig detaljer som syntax och olika programmeringsoperationer när de grundläggande aspekterna är helt förstådda.

Det finns många olika faktorer som inverkar på undervisning och inlärning av objektteknologi. En av dessa är de exempel som används, speciellt de första exemplen. Bra exempel måste vara realistiska och inte avspegla en välkänd situation, så att nybörjare bara kan koncentrera sig på identifiering och användning av de nya objektorienterade begreppen.

Det senaste decenniet har bedrivits en hel del forskning kring undervisning och inlärning av objektteknologin och andra aspekter av mjukvaruutvecklingen. Man börjar tillämpa kognitionsvetenskapliga teorier i analyser av kunskapsstrukturer, och olika strategier av programmeringen. Detta har skapat en solid vetenskaplig grund som vägleder utvecklingen av en mer effektiv pedagogik inklusive stödverktyg och miljöer. En effektiv pedagogik gäller framförallt pedagogiska mönster. De implicerar många egenskaper som har en stor betydelse för undervisning, inlärning och utveckling av mjukvara i allmänhet. Pedagogiska mönster representerar en stor vändpunkt i mjukvaruutveckling som skulle göra programmeringen tydligare och mer effektiv. De underlättar förståelsen av svåra och mer komplicerade system, och dessutom möjliggör de lättare och mer formaliserade sätt att dela erfarenheter. Pedagogiska mönster utgör också en väsentlig grund för konstruktion av olika stödverktyg och programmeringsmiljöer som utvecklades för att bl.a. underlätta undervisning och inlärning av objektteknologin. En viktig del av dessa stödverktyg och programmeringsmiljöer utgörs av olika typer av Microworlds. Microworlds är en form av interaktiva och grafikbaserade system som möjliggör för användaren att bl.a. utforska olika alternativ och testa olika hypoteser. Microworlds finns i olika typer och versioner som stödjer olika programmeringsspråk. En av Microworlds främsta egenskaper är att de möjliggör för användaren att få en direkt och visuell feedback när han/hon skriver sina instruktioner. På så sätt får användaren en bättre kontroll över vad som händer, exempelvis när variabler/objekt ändrar tillstånd/värde.

1.1. Syfte och metod

Det här arbetet syftar till att studera befintliga ansatser för undervisning och inlärning av objektteknologin i termer av Microworlds. Detta görs genom ingående sökningar av information om olika möjliga system som är utvecklade i syfte att effektivisera undervisningen och inlärningen av objektteknologin. Dessa system fungerar som undervisningsverktyg och har, till skillnad från traditionella ansatser, sin fokus på de underliggande koncepten istället för syntaxen. I arbetet redogörs för ett antal sådana system för att kunna ge någorlunda klar bild om hur dessa system fungerar. Sedan väljs tre av de för en mer detaljerad analys och utvärdering. Metoden för analysen och utvärderingen beskrivs utförligt i kapitel 5.

1.2 Disposition

Arbetet består av åtta kapitlen. Kapitel 1 är en inledning som ger en allmän överblick i ämnet. I kapitel 2 görs en kort beskrivning av det objektorienterade paradigmet och några andra begrepp som är grundläggande, samt en definition av en Microworld. I kapitel 3 redogörs för olika ansatser i form av pedagogiska mönster och olika teorier som syftar till att förbättra och effektivisera undervisningen och inlärningen. I kapitel 4 presenteras ett antal praktiska ansatser i form av Microworlds avsveda att fungera som mjukvaruverktyg som möjliggör presentation av objektorienterade koncept i en tydlig och meningsfull kontext. I kapitel 5 görs en utförlig diskussion av möjliga mål som anses karaktäriska för ett effektivt system, och vidare bestäms och formuleras ett antal konkreta mål som skall utgöra grund för analysen. I kapitel 6 väljs tre av de Microworlds som presenterades i arbetet, för en ingående analys. Analysen görs för ett system i taget och i form av en diskussion av de olika målen med hänsyn till det aktuella systemet. I kapitel 7 görs en diskussion som både visar likheter och skillnader mellan de tre systemen, samt deras lämplighet för användningen av studenter med olika prioriteringar. Kapitel 8 är en sammanfattning som betonar arbetets mest intressanta aspekter.

2. Definitioner

2.1. Vad är kognitionsvetenskap?

Kognitionsvetenskap är en av de viktigaste intellektuella utvecklingarna under de senaste decennierna. Begreppet är tvärvetenskapligt med kopplingar till flera olika områden som kognitionspsykologi, lingvistik, filosofi, datavetenskap och neurologivetenskap. Forskare från dessa områden insåg att de ställde många och mer eller mindre samma frågor som handlar om the nature of the human mind. Ordet kognition relaterar till perception och kunskap och därmed kan begreppet kognitionsvetenskap definieras som ”the science of the human mind” (Stillings, 1995, sida 1).

Enligt Stillings (1995) ser kognitionvetare på den mänskliga hjärnan som ett komplext system som tar emot regler, bearbetar och överlämnar information. Bearbetningen av information kallas för beräkningar eller informationsprocesser. En, för arbetet, intressant aspekt av kognitionsvetenskapen är kopplingen till bl.a. kognitionspsykologin som undersöker våra mentala förmågor som minne & inlärning, problemlösning, perception, uppmärksamhet, kommunikation, tänkande, mental representation och begreppsbildning. Kognitionsvetenskap inriktar sig på anskaffande, bearbetning och framställande av kunskaper och vidare på hur dessa används i olika tillämpningar. Konkret innebär detta ett sätt att se på vetenskapliga teorier utifrån praktiska tillämpningar, dvs. teorin härleds från applikationen, och inte tvärt om som man ofta ser det. Genom att studera praktiska tillämpningar av teoretiska modeller kan man få bättre insyn och därmed upptäcka brister och nya möjligheter som man inte tog hänsyn till tidigare. Detta medför viktiga kunskaper och nya aspekter som leder till förbättring av de teoretiska modellerna. Nackdelen är att en större vikt läggs på små detaljer på bekostnad av helheten, och därför blir den optimala modellen bara den bästa möjliga vilket anses tillräckligt.

Tillämpningar inom dataområdet kan illustreras genom att studera vad som händer när människor använder datorer och därmed bilda sig en uppfattning om deras beteende i allmänhet för att så småningom forma en teoretisk modell. Det som är extra viktigt i sammanhanget enligt Norman (1987) är sambandet mellan användarens psykologiska tolkning av uppgiften som skall utföras och det stöd som denna tolkning får av systemet.

2.2. Vad är objektorientering?

Objektorientering är en struktureringsteknik och ett tankesätt för att skapa programsystem. Tekniken bygger på att analys, design och programmering skall byggas runt objekt istället för runt funktioner. Dessa objekt är de begrepp som systemet hanterar (svaret på frågan VAD som görs) till skillnad mot funktioner som specificerar algoritmer (HUR det görs). Objektorientering kan också ses som en form av Modulariseringsmetod, där varje objekt är en modul i ett stort modulärt system. Sådana objekt är mer stabila när förändring sker än funktioner är, och kommer att klara förändring och utbyggbarhet bättre än system som är byggda runt funktioner. Objekten är, till skillnad från andra modulariserings metoder, också på en relativt detaljerad nivå, och dessutom finns möjligheten att skapa nya objekttyper (klasser) utifrån existerade objekttyper via en mekanism som kallas för arv. Detta gör att man kan definiera en ny objekttyp utifrån en existerande genom att endast definiera de egenskaper som skiljer objekttyperna åt, och återanvända de egenskaper som det existerande objektet har. Genom arv går det att uppnå återanvändning både inom en viss applikation och genom att identifiera tillräckligt generella objekt även mellan olika applikationer (Ericsson 1992).

En objektorienterad process börjar enligt Guzdial (2001) med att först identifiera substantiven i den del av världen som är relevant för programmet som skall utvecklas. Senare identifieras de objekt i den värld där programmet är avsedd att arbeta. Man definierar de olika objektens data, vad de gör (deras beteende), samt hur dessa objekt interagerar med varandra. Syftet med dessa definitioner är att kunna modellera den värld vari programmet kommer att fungera. Denna värld kallas för programmets domän.

2.2.1. Grundläggande begrepp

Ett programspråk är objektorienterat om det ger fullt stöd för inkapsling, dataabstraktion, arv, polymorfism och egen rekursion. Exempel på objektorienterade programspråk är Ada 95, C++, Effel, Objektiv C och Smalltalk. Ett objektorienterat program är ett exekverbart assemblering av objekt. De centrala begreppen inom objektorientering är klass och objekt. Ett Objektorienterat system består av ett antal klasser och objekt som instansieras av dessa klasser (Binder, 2000). De följande begreppen, klass, objekt, arv och polymorfism är några av de viktigaste och betraktas allmänt som karaktäristiska för objektorienterade programmeringsspråk:

Klass: är en lexikal enhet av olika satser (instruktioner) från vilka objekt kan skapas. I klassen beskrivs de olika egenskaperna (dock inte de specifika värden på egenskaperna) som objekten har, som hur objekten skall representeras, vilka möjliga operationer kan utföras på objekten och hur dessa operationer skall utföras. Klassen i sig är inte något av de objekt som den beskriver. En viktig aspekt av klassen är att den bara beskrivs en gång i programmet och sedan är det möjligt att skapa (instansiera) olika objekt med olika egenskaper av denna klass (Poplawski, 2002). Man säger att ett objekt är en instans av en viss klass. Då man skapar ett objekt instansierar man en klass. Klassen representerar typen, medan objektet representerar en förekomst av denna typ. Man kan inte utföra några operationer direkt på klassen. Den fungerar endast som en mall för de objekt (förekomster) av klassen som man senare skapar.

Klassen talar om för datorn, vilka egenskaper och beteenden som varje objekt som tillhör klassen har. Om exempelvis ett objekt som tillhör en specifik klass ombeds att göra något, så använder datorn beskrivningen av objektbeteenden som finns i klassen och de aktuella värdena av de, för uppgiften, relevanta egenskaperna hos detta objekt för att möjliggöra för tillåtna händelser. En klass betraktas som en kontrakt mellan utvecklaren av klassen och användaren och kan ses som en enhet bestående av två delar, en specifikations del och implementation del.

Objekt: Objekt är ett centralt begrepp inom den objektorienterade design- och programmerings filosofi. De har egenskaper som kan ändras under tiden och beteenden som kan variera beroende på egenskapernas aktuella värden, dvs. de gör saker som vanligtvis är beroende på sina egenskaper (Poplawski, 2002). Ett program består av många olika objekt som interagerar med varandra för att ändra på varandras egenskaper och därigenom möjliggöra för olika händelser. Ett objekt är en instans av en klass skapad vid kompilerings och exekverings tillfällen enligt dess klassdefinition och semantiken av dess programmeringsspråk. Objektet har en representation som beskriver dess nuvarande tillstånd och de olika operationer som kan användas för att på olika sätt påverka eller manipulera objektet. Ett objekt kan antigen ha direkt motsvarighet i verkligheten som exempelvis bankkonto, bil, eller kan vara ett implementerings objekt som exempelvis en länkad lista eller ett stack. Ett objekt är alltid av en viss klass. Olika objekt som tillhör en viss klass är fristående från varandra, och en operation på ett visst objekt påverkar endast detta objekt och ingenting annat.

Arv: är en helt unik metod för objektorientering. Den sker mellan klasser och inte mellan objekt. Vid en ny definition av en viss klass, arvs egenskaper från en annan existerande klass. Det enda som behöver beskrivas i den nya klassen är skillnaden gentemot den existerande klassen. Denna skillnad består oftast av tillägg av representationer och operationer, men kan också bestå av omdefinition eller borttag av operationer. Den existerande klassen kallas för superklass och den nya klassen kallas för subklass.

Polymorfism: Polymorfism innebär i praktiken något som kan ses som överlagring av funktioner och metoder. Den underlättar kommunikationen mellan objekt. Begreppet innebär att ett objekt kan skicka samma information till flera andra objekt, som tillhör olika klasser. Dessa objekt bearbetar sedan informationen och tolkar den på sitt sätt. Med andra ord behöver informationen inte vara speciell för varje objektklass. Fördelen med detta är att det blir lättare att underhålla programmen. Andersen (1991) försöker belysa begreppet Polymorfism genom ett exempel ur verkligheten: "En chef kan be flera av sina medarbetare om en lägesrapport där varje enskild individ tolkar denna begäran på sitt sätt och skriver sin rapport med det innehåll som är relevant för vederbörandes situation.”

Ett exempel på Polymorfism i programspråk är när flera funktioner kan ha samma namn så länge funktionernas parametrar skiljer sig åt på något sätt (Davis, 1996). Det är vanligt att man ibland måste skriva många olika funktioner som logiskt uträttar samma sak, men som av mer tekniska skäl (varje datatyp måste behandlas på sitt sätt) framtvingar olika versioner. Genom att använda samma namn för sådana funktioner blir användningen av dessa funktioner enklare och mer naturlig.

2.2.2. Den objektorienterade utvecklingsprocessen

Den optimala utvecklingen av objektorienterad mjukvara kräver att man lär sig mer än bara programmeringsspråk; man behöver grundläggande kunskaper i objektorienterade analys- och designmetoder, vilket ofta är svårt att på ett övertygande sätt förmedla till studenterna. Det viktigaste för studenterna är oftast själva koden. Så om koden verkar fungera då är den tillräcklig bra. Detta beror ofta på att de inte varit involverade i utvecklingen av något större mjukvaruprojekt. En mer eller mindre standardiserad utvecklingsprocess för mjukvara beskrivs i olika litteratur som behandlar ämnet Objektorientering. Guzdial (2001) menar att utvecklingsprocessen består i huvudsak av tre faser:

Objektorienterad analys: den fokuserar på problemet och syftar till att definiera en objektbaserad modell av domainen där programmet skall fingera. Analysen resulterar i en lista av objekt med data och beteenden, samt relationer mellan dessa objekt.

Objektorienterad design: den fokuserar på själva lösningen. Kunskaper och information från analysen appliceras på en implementation i ett visst programspråk. Målet är en detaljbeskrivning av slutprogrammet så att det går att implementera.

Objektorienterad programmering: byggandet av programmet som tidigare designats.

2.3. Vad är en Microworld?

En Microworld är ett begrepp som myntades av MIT Media Lab Learning and Common Sense Group. Det betyder en liten värld där man kan utforska olika alternativ, testa hypoteser och upptäcka fakta som är sanna om världen (MIT Media Lab, 1995). En Microworld skiljer sig från en simulering på så sätt att man uppmuntras att se den som en ”verklig” värld och inte som en simulering av en annan värld (t.ex. den fysiska världen som vi lever i). Flake (2000) beskriver ett antal egenskaper som är karaktäriska för en Microworld. Dessa är följande: