Att utvidga klasser. Programmering. Att utvidga klasser. Förvirring. hh.se/db2004

Relevanta dokument
Programmering. hh.se/db2004. SuperKarel, Nedbrytning & Styrsatser. Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering

Administrivia. hh.se/db Verónica Gaspes (Kursansvarig) 2 Mattias Enervall (Övningsassistent) Examination. 1 Skriftlig tentamen (betyg)

Administrivia. hh.se/db Verónica Gaspes (Kursansvarig) 2 Daniel Petersson (Labassistent) Examination. 1 Skriftlig tentamen (betyg)

Roboten Karel lär sig Java

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Funktioner. Programmering. Egendefinierade funktioner i Java. En Java-funktions anatomi. hh.se/db2004. Statiska metoder. Funktioner. resultatvärde.

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

Omdirigering. Omdirigering

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim Agenda (halvdag)

tentaplugg.nu av studenter för studenter

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

OOP Objekt-orienterad programmering

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs Verónica Gaspes. IDE-sektionen.

Principles of subclasses. Objekt-orienterad programmering och design Alex Gerdes, 2018

Mer om metoder och abstraktioner

TENTAMEN OOP

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

tentaplugg.nu av studenter för studenter

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

Laboration 1 - Grunderna för OOP i Java

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Programmering = modellering

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Java-syntax (arv) Exempel: public class Crow extends Bird {... } Jämför med Lab 1: public class FirstApp extends Frame {... }

Input. Programmering. Andra källor

Lösningsförslag till exempeltenta 2

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Laboration A Objektsamlingar

Modern Programmering (2546) Tentamen lördag

Exempel: Exempel: Exempel: Exempel: $djur=array("ko","katt","älg"); foreach ($djur as $d) { echo $d. " "; } Resultat. ko katt älg

PROGRAMMERING ÅK 9 INTRODUKTION

JUnit. Ska kompletteras med kodexempel på JUnit. DD2385 Programutvecklingsteknik Några bilder till föreläsning 12 21/5 2012

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram?

Objektorienterad programmering

Laboration 13, Arrayer och objekt

Lösningar till tentamen i EDAF25

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Principles of subclasses Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Laboration 2. returnerar true om det är omöjligt för roboten att göra move() utan att. exekveringsfel erhålls, annars returnera false.

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Separation of Concern. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Klasshierarkier - repetition

Föreläsning 15: Repetition DVGA02

Lösningar till tentamen i EDAF25

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

Tentamen i Objektorienterad programmering

Redovisning av inlämningsuppgifter

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Föreläsning 2. Länkad lista och iterator

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

TENTAMEN OOP

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

TENTAMEN OOP

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

Konstruktion av klasser med klasser

Klassdeklaration. Metoddeklaration. Parameteröverföring

Föreläsning REPETITION & EXTENTA

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Lösningsförslag till exempeltenta 1

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Programmering i C, 7,5 hp

Föreläsning 8 Programmeringsteknik och Matlab DD1312. Klassmetod. Egen modul

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Fördjupad Java. Undantagshantering. Fel

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 3

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Dugga i Grundläggande programmering STS, åk

JAVAUTVECKLING LEKTION 4

Tentamen OOP

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

LÖSNINGSFÖRSLAG TENTAMEN

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Objekt-orienterad programmering. Klassbegreppet och C++ UML. UMLs fördelar

F4. programmeringsteknik och Matlab

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 25 maj 2009

JAVA Mer om klasser och objektorientering

OOP Objekt-orienterad programmering

Användarhandledning Version 1.2

Transkript:

Programmering hh.se/db2004 Föreläsning 2: SuperKarel, Nedbrytning & Styrsatser Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Att utvidga klasser Man definierar en ny klass public class BeeperPickingKarel extends Karel { klassdefinitionens kropp Vad är det man säger? Här säger klassheadern att BeeperPickingKarel är en utvidgning av standardklassen Karel som importeras från stanford.karel-biblioteket. Center for Research on Embedded Systems IDE-sektionen Att utvidga klasser Förvirring Man definierar en ny klass public class BeeperPickingKarel extends Karel { klassdefinitionens kropp Vad är det man menar? Den nya klassen (här BeeperPickingKarel) bygger på allt som den befintliga klassen (här Karel) erbjuder. När en klass definieras med utvidgning kallas den nya klassen för en subklass av moderklassen. I vårt exempel, är BeeperPickingKarel en subklass av Karel. På motsvarande sätt kallas Karel för en superklass till BeeperPickingKarel. En subklass utvidgar sin superklass och kan då lägga till ny funktionalitet till den

Nya metoder En förbättrad Karel Nya beteenden hos objekt introduceras genom att definiera nya metoder Exempel public class SomeTaskKarel extends Karel{ public void run(){ /* Uppdraget! */ private void turnright(){ private void turnaround(){ Metoderna är användbara! Vi vill att många klasser skall kunna använda turnright() och turnaround(). Vi skulle vilja lägga till de i Karel! Men! Vi har inte tillgång till klassen Karel! Även om vi hade det, vi bör inte ändra i den efterssom det är många andra som använder Karel och vi kan då förstöra deras program! Lösning! Definiera en ny klass som erbjuder dessa metoder och som alla andra klasser kan ärva från! En förbättrad Karel SuperKarel /* * The NewImprovedKarel class extends the basic Karel * class so that any subclasses have access to the * turnright and turnaround methods. It does not define * any run method of its own. */ import stanford.karel.*; public class NewImprovedKarel extends Karel { public void turnright() { public void turnaround() { stanford.karel Paketet innehåller redan en klass SuperKarel som erbjuder detta och lite till! Så i fortsättningen kommer vi att utvidga SuperKarel i våra program. Förvirring Karel är en superklass av SuperKarel!

Mera exempel Mera exempel Karel lagar en väg Karel lagar en väg Hur kan man tänka? Till exempel: 1 Flytta till gropen. 2 Fyll gropen genom att lämna en beeper där. 3 Flytta till nästa korsningen. Som programfragment public void run() { fillpothole(); Eller: 1 Klättra ner från hyllan. 2 Lämna en beeper. 3 Klättra upp till hyllan. Som programfragment public void run() { climbdown(); climbup(); Nedbrytning Nya delar av Karel-språket Vi säger att vi bryter ner problemet i mindre problem som kan också brytas ner till enklare problem... tills vi kommer till problem som kan lösas med enkla kommandon. Det brukar kallas för stepwise refinment (stegviss förfining). I nästa steg definierar man de metoder som inte är baskommandon. Vad skall man tänka på? Varje delproblem bör utföra en begreppsmässig enkel uppgift. Ett gott tecken på om Du har lyckats med att hitta en rimlig uppgift kommer från det namn Du ger din metod. Varje delproblem bör utföra en uppgift som är så allmän som möjligt så att den kan användas i flera sammanhang. by Andy Wahrol Upprepningar Man kan vilja instruera Karel att göra samma sak ett antal gånger. turnright turnleft(); for-loop for(int i = 0; i < 3 ; i++){

Nya delar av Karel-språket Vilka villkor kan Karel testa? Upprepningar Man kan vilja instruera Karel att göra samma sak medan ett villkor gäller Karel kan känna av omgivningen gettonextwall... så längre det inte finns några murar while-loop while ( frontisclear() ){ Mer generella program Karel går runt ett varv i en värld av godtycklig storlek! Algoritmer och kodning Mera kodfragment Karel skall dubblera antalet beepers i en hög Karel finns intill en hög med beepers och skall dubblera antalet beepers i högen. Karel har gränslös med beepers i säcken. Algoritmen Karel kan inte räkna! Men han skulle kunna lägga ner 2 beepers för varje beeper han plockar. Han kommer att behöva bygga en extra hög och flytta den. Kodfragment private void doublebeepersinpile(){ while(beeperspresent()){ put2beepersnextdoor(); movebackpilenextdoor(); private void put2beepersnextdoor(){ moveback(); Om koden För klasser och metoder och styrsatser, skriver man kroppen lite indragen i texten så att man kan lätt se strukturen. Kommentarer är viktiga. Ett sätt att kommentera metod definitioner är att beskriva vad de skall åstadkomma men även pre- och post- conditions.

Om koden Några vanliga fel /* * Precondition: Karel står på en korsning * där det finns minst en beeper. * * Postcondition: Karel står på samma korsning * tittar åt samma håll och det finns en beeper mindre * och det finns 2 beepers mer i korsningen intill. */ private void put2beepersnextdoor(){ moveback(); Infinite loops I vissa tillstånd kan while(frontisclear()){ leda till en oändlig beteende. Det är inte så ovanlig att man skriver while-loopar som i visa situationer inte kommer närmare att villkoret skall sluta gälla! Några vanliga fel Ytterliggare en styrsats Off-by-one-bug (OBOB) Det är inte så ovanligt heller att man glömmer speciella fall antigen i början av en loop eller i slutet. Till exempel, om Karel skall fylla alla korsningar med en beeper, så är while (frontisclear()){ inte tillräcklig! while (frontisclear()){ Man kan välja att utföra något bara om ett vilkor gäller. removebeeper pickbeeper() om det finns en beeper! if if ( beeperpresent() ) {

Ytterliggare en styrsats Ytterliggare ett exempel Man kan även välja mellan 2 alternativa beteenden beroende på om villkoret gäller eller ej. if-else if ( beeperpresent() ) { else { Karel springer 100 meter häck.