Hos vad? och bör därför vara instanseller klassvariabel i vilken klass?
|
|
- Ann-Charlotte Lindgren
- för 8 år sedan
- Visningar:
Transkript
1 Övningstillfälle 5 Lite kort repetition om klasser och objekt class EnKlass(KlassAttÄrvaFrån): klassvariabel = 5 def init (self) KlassAttÄrvaFrån. init (self) self.instansvariabel = 10 s = 'klassvariabel= '+str(enklass.klassvariabel) s +=', instansvariabel='+str(self.instansvariabel) Först definitionen av klassens namn och vad den ärver. Vi får alla metoder som finns i superklassen. Sedan kommer vanligen eventuella klassvariabler, som alltså finns en gång i klassen, och alltså är gemensam för alla instanser! Konstruktorn Man bör anropa superklassens init. Sätter en instansvariabel, som alltså kan ha olika värde för varje instans Vi överskuggar str () metoden och returnerar klassvariabelns och instansvariabelns värden i strängform Exempel: "Bil" (typ av fordon), "Mazda 6" (bilmodell), "Pappas Mazda 6" "Bil" är ett allmänbegrepp; det är "Mazda 6" också, men det är ett mer specifikt begrepp. "Pappas Mazda 5" är däremot (en bestämd beskrivning av) ett enskilt ting. 1 Begreppet "Bil" motsvaras i Python (lämpligen) av en klass; "Mazda 6" (modellen) motsvaras av en subklass som ärver av superklassen Bil. "Pappas Mazda 6" är en enskild bil, eller ett enskilt objekt, dvs. (lämpligen) en instans av Mazda6 (och därmed samtidigt en instans av Bil). Egenskap Aktuell mängd bensin Bensintankens kapacitet Plats (Location) Antal dörrar Ägare såvida vi inte menar bilmodellens "ägare" Antal växlar Hos vad? och bör därför vara instanseller klassvariabel i vilken klass? Är en egenskap hos alla enskilda bilar (instanser), men olika bilar av samma modell har inte mängden bensin gemensamt => instansvariabel i Bil Är visserligen en egenskap hos varje enskild bil; men alla bilar av samma modell har samma kapacitet => egenskap hos modellen => klassvariabel i Mazda6 Hos alla enskilda bilar, alltså en instansvariabel i Bil. Alla enskilda bilar har ett visst antal dörrar, men alla bilar av en viss modell har samma antal dörrar, alltså en klassvariabel i Mazda6 Hos alla enskilda bilar och är därmed lämpligen en instansvariabel i Bil Alla Mazda 6 "ägs" av Mazda => egenskap hos modellen => en klassvariabel i Mazda6 Egenskap hos modellen, dvs. klassvariabel i 1 Förhållandet mellan begrepp och de enskilda ting som faller under ett begrepp är ett gammalt filosofiskt problem. Här intresserar vi oss dock för hur detta praktiskt berör klasser respektive objekt.
2 Mazda6 Antal sittplatser Hos modellen => klassvariabel i Mazda6 Max tillåtet antal passagerare Modellen => klassvariabel i Mazda6 såvida vi inte menar för alla bilar Egenskap hos alla bilar i allmänhet (i Sverige får en bil ha max förare + 8 passagerare) => klassvariabel i Bil Minimikrav som t.ex. krav på belysning, Alla bilar i allmänhet (alla bilar ska uppnå de styrning, speglar, bromsar lagstadgade kraven för bilfordon) => klassvariabler i Bil Kört antal mil (milräknare) Hos alla enskilda bilar => instansvariabel i Bil Registrerings-id (registreringsskylt) Hos alla enskilda bilar => instansvariabel i Bil Modellbeteckningen "Mazda 6" Hos modellen => klassvariabel i Mazda6 Benämningen "Bil" Alla bilar i allmänhet kan benämnas "Bil" => klassvariabel i Bil Kommentar: Det är inte alltid självklart om en egenskap ska vara instans- eller klassvariabel, ej heller i vilken klass den ska finnas. Det beror nämligen på hur man har tänkt sig att klasshierarkin kan kommat att byggas ut. Kan man t.ex. tänka sig Lådbil som en subklass till Bil? Om ja, så blir en hel del av variablerna ovan irrelevanta för den klassen och man kanske får tänka om. Fråga 1: Om du är osäker på om en variabel bör vara en instans- eller klassvariabel, vad bör du välja? (Eller omvänt, vilket val kan leda till störst problem?) 2 Fråga 2: En av fördelarna med klassvariabler är att de tar mindre plats. Antag att du har en list-variabel som innehåller 1000 heltal. Hur mycket minne kommer gå åt om listan är en klassvariabel? Hur mycket går åt om varje instans har en separat (dvs. inte referenser till en och samma lista) lista och antalet instanser är ? 3 class Car: MAX_PASSENGERS = 9 # Inklusive förare TERM = 'Bil' # benämning def init (self, owner, plate): self.owner = owner self.plate = plate self.milage = 0 Definiera klassen Bil Med bl.a. information om tillåtet antal passagerare och benämning (konstanta klassvariabler) Konstruktor 2 Du bör låta den vara en instansvariabel, då detta aldrig kan leda till direkt logiska fel som hindrar programmet från att fungera, dvs. det gör inget (logiskt sett) att vi lagrar en variabel onödigt många gånger genom att lägga den i varje instans. Om variabeln däremot kommer anta olika värden för olika instanser, blir det helt fel om vi hanterar det genom en klassvariabel som är gemensam för alla instanser. 3 Ett heltal tar upp minst två byte. Klassvariabeln upptar då ca 2 kilobyte, medan instansvariablerna tillsammans upptar > 2 kilobyte gånger instanser = 20 megabyte (ganska onödigt om vi vet att alla instanser kommer att ha exakt samma lista). 4 En sådan metod kallas abstrakt, och därmed borde klassen också anses vara abstrakt. Typiskt för statiska OOspråk som Java, är att det inte skulle vara möjligt/tillåtet att skapa instanser av en sådan klass, men i Python går det bra, men om metoden anropas, riskerar vi att krascha! Dessutom finns ingen mekanism i Python som verkligen tvingar programmeraren att implementera ofullständiga metoder. Mönstret går igen ganska ofta: Python är ett "slappt" språk, som låter programmeraren slappa, men riskerar därmed att släppa igenom osäkra och dåligt skrivna program. Läs för att se ett märkligt försök att på egen hand simulera abstrakta metoder. Eventuellt är detta löst i Python v. 3?
3 self.fuel_tank = 0 return Car.TERM def get_owner(self): return self.owner def get_nr_doors(self): # Gör ingenting och ska därmed # implementeras av subklasser pass class Mazda6(Car): GEARS = 6 NR_DOORS = 4 MAX_TANK = 50 def init (self, owner, plate): # Obs anropa superklassens konstruktor Car. init (self, owner, plate) def get_nr_doors(self): return NR_DOORS return 'En ' + str(mazda6.nr_doors) + \ ' dörrars ' + Car. str (self)+ \ ', som är en Mazda 6' + \ ', och ägs av ' + self.get_owner() b = Car('Olle', 'ABC 345') print 'b är en', b m = Mazda6('pappa', 'XYZ 123') print 'm är en', m Sträng-metod get-metoder (variablerna bör vara privata) Obs, en sådan här definition kan vara bra för att tvinga alla subklasser att leva upp till ett visst gränssnitt, men gör klassen själv ofullständig. 4 Definiera klassen Mazda6 som ärver av Car Med några klassvariabler (som lämpligen betraktas som konstanter - VERSALER) Konstruktor, som i sin tur anropar superklassens konstruktor! VIKTIGT!! Obs att vi då anger argumentet self. 5 Implementation av get_nr_doors() Överskugga sträng-metoden med en specialiserad metod Skapa instanser! b är en Bil m är en En 4 dörrars Bil, som är en Mazda 6, och ägs av pappa Exempel på metoder som finns i klassen object och som vi kan överskugga: object. init (self[,...]) 6 Called when the instance is created. The arguments are those passed to the class constructor expression. If a base class has an init () method, the derived class s init () method, if any, must explicitly call it to ensure proper initialization of the base class part of the instance; for example: BaseClass. init (self, [args...]). object. str (self) Called by the str() built-in function and by the print statement to compute the informal string representation of an object. object. cmp (self, other) Called by comparison operations if rich comparison (see above) is not defined. Should return a negative integer if self < other, zero if self == other, a positive integer if self > other. If no 5 Det kan tyckas bisarrt att vi helt plötsligt, till skillnad från förut, ska ange argumentet self. Det har att göra med hur Python fungerar och att vi anropar superklassens init som en klassmetod (inte instansmetod). 6 (ganska tung artikel men säger mycket om hur Python fungerar)
4 cmp (), eq () or ne () operation is defined, class instances are compared by object identity ( address ) object. hash (self) Called by built-in function hash() and for operations on members of hashed collections [ ]. hash () should return an integer. The only required property is that objects which compare equal have the same hash value; [ ] 7 En av de diagnostiska datorprovsfrågorna på hemsidan, 8 illustrerar detta tydligt: Om vi i definitionen av klassen Abborre skriver class Abborre(Fisk): innebär det att A: Klassen Abborre ärver attribut och metoder från klassen Fisk. B: Klassen Fisk ärver attribut och metoder från klassen Abborre. C: Klassen Abborre ärver enbart attributen från klassen Fisk. D: Klassen Fisk ärver enbart metoderna från klassen Abborre. X: Inget av ovanstående. Jag kan avslöja att enligt facit är rätt svar A, och för vilket vettigt OO-språk som helst skulle man också otvetydigt svara A men är det här verkligen helt sant för Python? För metoderna är det onekligen så, men hur är det med instansvariabler? Låt oss se efter class Fisk: Definiera klassen Fisk def init (self): self.location = 'Mälaren' Med instansvariabel location class Haj(Fisk): def init (self): Fisk. init (self) self.species = 'Haj' class Abborre(Fisk): def init (self): self.species = 'Aborre' f = Haj() print f.location f = Abborre() print f.location Definiera klassen Haj som ärver av Fisk Anropa superklassens init Lägg till en instansvariabel Abborre ärver också av Fisk. Strunta i att anropa superklassens init Lägg till en instansvariabel Provkörning Fungerar utmärkt (skriver ut Mälaren) Detta borde väl också fungera, Abborre har ju ärvt Fisk. Men NEJ! Det kraschar med "location not defined". Instansvariabeln har alltså INTE ärvts! Ovanstående behöver förstås en kommentar. Hur kommer det sig att location inte är definierad i Abborre? Jo, för att instansvariabeln skapas dynamiskt först när konstruktorn / init verkligen körs. Och vad händer när vi instansierar Abborre? Jo, konstruktorn för Abborre körs, men konstruktorn i Fisk körs INTE! För att den ska köras måste vi explicit säga till om det, så som illustrerat i klassen Haj. Jag repeterar vad som står i dokumentationen för init: 7 hash () är intimt kopplad till eq () (eller cmp ()). Obs att objektet ska vara omuterbart! 8 Första frågan, prov nr 5.
5 If a base class has an init () method, the derived class s init () method, if any, must explicitly call it to ensure proper initialization of the base class part of the instance; for example: BaseClass. init (self, [args...]). Den här märkligheten uppstår pga. Pythons dynamiska natur (instansvariablerna skapas först i init). Även i andra OO-språk, som Java, är det av intresse att anropa superklassens konstruktor för att få hjälp med initialiseringen. Däremot så ärvs instansvariablerna i den mening att de alltid existerar i subklassen (men måhända oinitialiserade). Vi kan konstatera att enbart utifrån raden "class Abborre(Fisk):" kan vi faktiskt inte veta om instansvariablerna ärvs! Fler frågor Vad skapas av satsen nedan? <pre> barnfilm = Film("Lilla Kycklingen", 81) <s1> A: Ett objekt med två klassattribut. </s1><s2> B: Ett objekt med två statiska metoder. </s2><s3> C: Bara ett objekt, vi kan inte få ut information om objektets attribut eller metoder från ovanstående sats. </s3><s4> D: Ett objekt med två metoder. Betrakta följande kod: class Skolan(object): def init (self,adress): self.adress = adress def ret_adress(self): return self.adress class Tekniska(Skolan): return "teknis" s=skolan("osquars backe 2") k=tekniska("lindstedsv 5") print k.ret_adress() Vad kommer att hända när programmet körs? <s> <s1> A: Skrivs på skärmen "Osquars backe 2" </s1><s2> B: Programmet kommer att krascha för att metodern <code>ret_adress</code> finns inte definierad i klassen Tekniska. </s2><s3> C: Skrivs på skärmen "teknis" </s3><s4> D: Skrivs på skärmen "Listedsvägen 5" Varför är det bra att skapa egna moduler?
6 <s1> A: Modulerna kan återanvändas i andra program. </s1><s2> B: Man slipper använda variabler. </s2><s3> C: Felsökning förenklas. </s3><s4> D: Progrmmet blir överskådligare. Anta att vi håller på att definiera en metod i klassen Semla, där <pre> class Semla(Bakverk): Hur gör man för att anropa en metod i Bakverk inifrån Semla? <s1> A: Importerar en modul. </s1><s2> B: Definierar en ny klass. </s2><s3> C: Tar bort parametrarna i metodanropet. </s3><s4> D: Använder funktionen super. Tkinter och grafik (s. 291 ff.): from Tkinter import * import random root = Tk() c = Canvas(root) x1, y1 = 0, 0 # från-koordinater x2, y2 = None, None # till-koordinater for i in range(100): x2 = random.randrange(100) y2 = random.randrange(100) c.create_line(x1, y1, x2, y2) x1, y1 = x2, y2 c.pack() root.mainloop() print 'slut' Skapa rotobjektet Skapa en Canvas = rityta (obs det genomgående mönstret för s.k. widgets i Tkinter: första argumentet är en referens till den omgärdande behållaren) Rita en linje (slumpmässig slutpunkt) Slutpunkten blir vår nya utgångspunkt pack(), "placerar" objektet Här börjar Tkinter jobba med att framställa grafiken. Problem: anropet till mainloop() "blockerar", 9 vilket gör att 'slut' inte skrivs ut förrän vi stänger fönstret. Vad göra? Det finns två lösningar till ovanstående problem: 1) Man skapar egna s.k. "trådar" som i princip är parallella exekveringar, där vi alltså kan göra något samtidigt som mainloop() kör. (Kanske inte så aktuellt till att börja med) 2) Vi definierar s.k. call-back-metoder, som anropas av systemet (Python), och därmed ger oss kontroll när användaren har gjort något intressant på skärmen, t.ex. tryckt en knapp. Kallas även "Event-Driven Programming". Exempel med alternativ 2: 9 Man säger att ett anrop "blockerar" om programexekveringen stannar. Anrop till input() är ett annat exempel.
7 from Tkinter import * class App: def init (self, master): frame = Frame(master) frame.pack() self.button = Button(frame, text="quit", fg="red", command=master.destroy) self.button.pack(side=left) self.hi_there = Button(frame, text="hello", command=self.say_hi) self.hi_there.pack(side=left) def say_hi(self): print "hi there, everyone!" root = Tk() app = App(root) root.mainloop() En klass som representerar våra miniapplikation Den har en ram med en quit-knapp med callback till master.destroy (stänger applikationen) 10 och en hej-knapp med callback till self.say_hi 11 Här definierar vi say_hi som alltså kommer att anropas när användaren klickar hejknappen! Detta anrop blockerar som vanligt, men knapparna kommer att ge oss nödvändig kontroll när de trycks! 10 Se för destroy, men det kanske finns bättre sätt? 11 Obs, när funktionens namn inte följs av parenteser så är det en metod/funktions-referens och inte ett anrop (själva anropet gör Tkinter när knappen trycks). Man kan göra anropet explicit via ett lambdauttryck, men det kanske känns ännu konstigare: command=lambda:self.say_hi().
EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass
Övningstillfälle 4 Klasser och objekt (s. 221 ff.) Syfte 1: En naturlig fortsättning på koncepten abstraktion och inkapsling! Funktion (återanvändning av skyddad, säker och testad kod) Modul (återanvändning
Läs merKort om klasser och objekt En introduktion till GUI-programmering i Java
Kort om klasser och objekt En introduktion till GUI-programmering i Java Klasser En klass är en mall för hur man ska beskriva på något. Antag att vi har en klass, Bil. Den klassen innehåller en lista på
Läs merObjektorienterad programmering i Java
Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet
Läs merIntroduktion till arv
Introduktion till arv 6 INTRODUKTION TILL ARV Arv Generell-Speciell Arv för att utnyttja det vi redan gjort Återanvändning Basklass Härledd klass Varför arv? Inför en subklass för att uttrycka specialisering
Läs merFöreläsning 8 - del 2: Objektorienterad programmering - avancerat
Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta
Läs merSätt att skriva ut binärträd
Tilpro Övning 3 På programmet idag: Genomgång av Hemtalet samt rättning Begreppet Stabil sortering Hur man kodar olika sorteringsvilkor Inkapsling av data Länkade listor Användning av stackar och köer
Läs merFöreläsning 2 Objektorienterad programmering DD1332. Typomvandling
metoder Föreläsning 2 Objektorienterad programmering DD1332 Array [modifierare] String metodnamn (String parameter) Returtyp (utdata typ) i detta fall String Indata typ i detta fall String 1 De får man
Läs merArv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }
En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class
Läs merObjektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016
Objektorienterad Programkonstruktion Föreläsning 2 2 nov 2016 Objekt - klass Namn Fält1 Fält2 Fält3 Metod1 Metod2 Metod3 Metod4 Objekt - klass Objekt - klass Objekt - klass + Objekt - klass public class
Läs merTentamen OOP 2015-03-14
Tentamen OOP 2015-03-14 Anvisningar Fråga 1 och 2 besvaras på det särskilt utdelade formuläret. Du får gärna skriva på bägge sidorna av svarsbladen, men påbörja varje uppgift på ett nytt blad. Vid inlämning
Läs merClasses och Interfaces, Objects och References, Initialization
Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class
Läs merOOP Objekt-orienterad programmering
OOP F9:1 OOP Objekt-orienterad programmering Föreläsning 9 Arv och klasshierarkier Polymorfism OOP F9:2 Djur - String namn - int vikt + String getnamn() + int getvikt() + void ökavikt(int x) Ko - int mjölkvolym
Läs merFöreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc
Föreläsning 5 (6) Metoder Metoder Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc Metoder Deklarera public void setnamn(string n) Åtkomstmodifierare Returtyp
Läs merÖvningar Dag 2 En första klass
Kurs i C++ Sid 1 (5) Övningar Dag 2 En första klass Denna övning går ut på att steg för steg bygga upp en klass och skapa objekt. Vi kommer att utgå från en sammansatt datatyp i en struct och parallellt
Läs merFöreläsning 13 och 14: Binära träd
Föreläsning 13 och 14: Binära träd o Binärträd och allmänna träd o Rekursiva tankar för binärträd o Binära sökträd Binärträd och allmänna träd Stack och kö är två viktiga datastrukturer man kan bygga av
Läs merTentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.
Tentamen 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.00, sal E33 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel
Läs merEnkla variabler kontra referensvariabel
Enkla variabler kontra referensvariabel En variabel är ett namngivet minnesutrymme i datorns primärminne. En variabel som används för att representera en primitiv datatyp kallas för enkel variabel. Deklarationssatsen
Läs merProgrammering för språkteknologer II, HT2014. evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/
Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Hashtabeller
Läs merTENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: 13-06-05 Tid: kl 16.00-20.
Umeå Universitet Datavetenskap Anders Broberg 130605 TENTAMEN Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg VT-13 Datum: 13-06-05 Tid: kl 16.00-20.00 Namn: Personnummer:
Läs merLaboration 1 - Grunderna för OOP i Java
Uppdaterad: 2006-08-31 Laboration 1 - Grunderna för OOP i Java Inledning Laborationen går ut på att lära sig grunderna för objektorienterad programmering, samt motsvarande språkkonstruktioner i Java. Labben
Läs merFöreläsning 8 Programmeringsteknik och Matlab DD1312. Klassmetod. Egen modul
Föreläsning 8 Programmeringsteknik och Matlab DD1312 er, Self Metoderna:, av metoder, Det är en metod som tillhör klassen och inte objektet. class Skylt(object): antal=0 def init (,r):.reklam=r def antal():
Läs merFöreläsning 6: Introduktion av listor
Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.
Läs merGrundläggande programmering med C# 7,5 högskolepoäng
Grundläggande programmering med C# 7,5 högskolepoäng Provmoment: TEN1 Ladokkod: NGC011 Tentamen ges för: Omtentamen DE13, IMIT13 och SYST13 samt öppen för alla (Ifylles av student) (Ifylles av student)
Läs merFöreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder
Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305 Klass Object, instans av klass public/private Klassvariabler och klassmetoder 1 Array och ArrayList Arrayer och ArrayList är till för att innehålla
Läs merIdag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes
Idag statiska metoder och variabler private/public/protected final, abstrakta klasser, gränssnitt, delegering wrapper classes ett lite större exempel Objectorienterad programmering Sida 1 Vad vi vet om
Läs merFöreläsning 4: Poster
Föreläsning 4: Poster Följande är genomgånget: type Person_Type is Namn : String(30); Skonr : Float; Kon : Boolean; Diskussion runt detta med olika typer m.m. Har tagit upp vilka operationer man kan göra
Läs merMer om klasser och objekt
Klassvariabler och klassmetoder En klass kan innehålla klassvariabler och klassmetoder. TDA143 I1 Programmerade system Föreläsning 5 (OH-bilder 5) Mer om klasser och objekt Christer Carlsson Det som skiljer
Läs merAdministrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering
Programmeringsteknik för I1 Övning 2 Administrativt Övningsgrupp 2 (Sal E32/D32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kontrollera att ni har fått Lab2 inrapporterad
Läs merObjektorienterad programmering
Objektorienterad programmering Emil Ahlqvist (c10eat@cs.umu.se) Didrik Püschel (dv11dpl@cs.umu.se) Johan Hammarström (c08jhm@cs.umu.se) Hannes Frimmel Moström (c10hml@cs.umu.se) 1 1. Introduktion 1.1 Objektorienterad
Läs merMer grafik. Jan Erik Moström
Mer grafik from Tkinter import * root = Tk() mf = Frame(root) mf.pack() cv = Canvas(mf) o1 = cv.create_oval(100,100,80,80,outline="red",fill="blue", width=2) o2 = cv.create_oval(10,10,80,80,outline="red",fill="green",
Läs merObjektsamlingar i Java
1 (6) Objektsamlingar i Java Objektorienterad programmering 3 Syfte Att ge träning i att använda objektsamlingar i Java. Mål Efter övningen skall du kunna använda objektsamlingsklasserna ArrayList och
Läs merFöreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser
Föreläsning 5-6 Innehåll Exempel på program med objekt Skapa och använda objekt Skriva egna klasser public class DrawSquare { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600,
Läs merTDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 TDDE11, 725G90/1 Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Introduktion OOP Instanser, instansvariabler, instansmetoder
Läs merTDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Konstruktorer Statiska metoder & attribut
Läs merFöreläsning 5-6 Innehåll
Föreläsning 5-6 Innehåll Skapa och använda objekt Skriva egna klasser Datavetenskap (LTH) Föreläsning 5-6 HT 2017 1 / 32 Exempel på program med objekt public class DrawSquare { public static void main(string[]
Läs merFörsättsblad till skriftlig tentamen vid Linköpings Universitet
Försättsblad till skriftlig tentamen vid Linköpings Universitet Datum för tentamen 2016-03-21 Sal Tid 08:00 12:00 Kurskod Provkod Kursnamn/benämning Institution Antal uppgifter som ingår i tentamen Antal
Läs mer"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde
Föreläsning 7 "Har en"-relation Arv "Har en" "Är en" Superklassen Object Överskuggning Fordonsexempel Seminarium 2 Relevanta uppgifter Uppgift 31 I exemplet Boll från förra föreläsningen gällde följande
Läs merDagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?
Programmeringsteknik och Matlab Övning 4 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312
Läs merArv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier
Arv Fundamental objekt-orienterad teknik arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Programmeringsmetodik -Java 165 Grafisk respresentation: Arv
Läs merStatic vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018
Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design (DIT95) Niklas Broberg, 2018 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon
Läs merProgrammeringsteknik med C och Matlab
Programmeringsteknik med C och Matlab Kapitel 2: C-programmeringens grunder Henrik Björklund Umeå universitet Björklund (UmU) Programmeringsteknik 1 / 32 Mer organisatoriskt Imorgon: Datorintro i lab Logga
Läs merLösningsförslag övning 2.
Objektorienterad programmering, Z1 Lösningsförslag övning 2. Uppgift 1. public class SIUnits { public static double yardspermeter = 1.093613; public static double poundperkilo = 2.204623; public static
Läs merTentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)
Grundläggande programmering med C# Provmoment: Ladokkod: Tentamen ges för: 7,5 högskolepoäng TEN1 NGC011 Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga) (Ifylles av student) (Ifylles av student)
Läs merTENTAMEN OOP
TENTAMEN OOP 2014-01-19 ANVISNINGAR Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. BETYGSÄTTNING Max antal poäng är 30. För att bli
Läs merFöreläsning 13 Innehåll
Föreläsning 13 Innehåll Arv Repetition Om tentamen Datavetenskap (LTH) Föreläsning 13 HT 2017 1 / 32 Diskutera Här är början på klassen MemoryWindow som använts på en lab. Vad kan menas med extends SimpleWindow?
Läs merObjektorienterad programmering D2
Objektorienterad programmering D2 Laboration nr 2. Syfte Att få förståelse för de grundläggande objektorienterade begreppen. Redovisning Källkoden för uppgifterna skall skickas in via Fire. För senaste
Läs merFöreläsning 16 Arv. Jan Lönnberg 3.11.2011. T-106.1212 Grundkurs i programmering
Föreläsning 16 Arv Grundkurs i programmering Jan Lönnberg Institutionen för datateknik -universitetets högskola för teknikvetenskaper 3.11.2011 Varför? I ett studieregister har vi både studenter och lärare.
Läs merLaboration 3, uppgift En klass för en räknare
Laboration 3, uppgift 1 3.1 En klass för en räknare Ursprungligen skriven av Erland Holmström. Magnus Myreen har uppdaterat vissa delar. Hösten 2014 Anvisningar: Programmet skall utformas enligt de principer
Läs merDet finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.
Tentamen Programmeringsteknik I 2014-10-17 Skrivtid: 0800-1300 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till
Läs merpublic och private Obs: private inte skyddar mot access från andra objekt i samma klass.
public och private En metod som är public får anropas från alla metoder i alla klasser. Ett attribut som är public får avläsas och ändras från alla metoder i alla andra klasser. En metod som är private
Läs mer2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa
2203$( Föreläsning ii - Mer om Java bla this och konstruktorer Av Björn Eiderbäck Email: bjorne@nada.kth.se Adress: Rum 1641, 6tr NADA Osquars Backe 2 Tel: 7906277 previous next Exempel: lampa Light1 #
Läs merGrundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14
Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 14 I torsdags & fredags: arrayer Deklaration, initiering, åtkomst Arrayer är referenser Arrayer som parametrar och returvärden Exempel
Läs mer2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning
2I1049 Föreläsning 5 Objektorienterad programmering i Java KTH-MI Peter Mozelius Objektorientering Världar uppbyggda av objekt Inte helt olikt vår egen värld Ett sätt att modularisera våra system Objekten
Läs mer1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.
1 Uppgift 1 Klassen Company Banken FinanceTrust som tidigare bara haft privatpersoner som kunder vill nu bygga ut sitt datasystem så att även företag kan registreras som kunder. Skriv klassen Company som
Läs merFöreläsning 9: Arv och UML
TDA 545: Objektorienterad programmering Föreläsning 9: Arv och UML Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Quiz Vad betyder static? Varför skriver man get-metoder? public int getpos() { return pos;
Läs merObjektorienterad Programkonstruktion, DD1346 FACIT. Tentamen 20150613, kl. 9.00-12.00
Skolan för datavetenskap och kommunikation Objektorienterad Programkonstruktion, DD1346 FACIT Tentamen 20150613, kl. 9.00-12.00 Tillåtna hjälpmedel: Papper, penna och radergummi. Notera: Frågorna i del
Läs merIdag: Centrerad utskrift. Granskning. DD1311 Programmeringsteknik med PBL. Granskning Felhantering GUI. Föreläsning 15.
Skolan för Datavetenskap och kommunikation Idag: DD1311 Programmeringsteknik med PBL Granskning Felhantering GUI Föreläsning 15 På torsdag: Mer om GUI På grupptimmen: genomgång av granskningsprotokollet
Läs merTänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.
Tentamen Programmeringsteknik I 2015-01-10 Skrivtid: 8.00 13.00 Hjälpmedel: Java-bok Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till
Läs merTDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Mer om Interface Generiska klasser Undantag Nästlade klasser 1
Läs merI STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else
Förkunskaper från tidigare föreläsningar: Objektorienterad Programmering (TDDC77) Föreläsning IX: Klasser och Objekt, Instantiering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2015 I STONE I Variabler,
Läs merFöreläsning 3.1: Datastrukturer, en översikt
Föreläsning.: Datastrukturer, en översikt Hittills har vi i kursen lagt mycket fokus på algoritmiskt tänkande. Vi har inte egentligen ägna så mycket uppmärksamhet åt det andra som datorprogram också består,
Läs mer2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik
2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det riktiga provet tar 45 minuter (en lektionstimme) och det
Läs merFöreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser
Föreläsning 8 Arv och abstrakta klasser Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen (extends) Den nya klassen behåller alla egenskaper som den gamla
Läs merOOP Objekt-orienterad programmering
OOP F10:1 OOP Objekt-orienterad programmering Föreläsning 10 Mer om arv och klasshierarkier Interface Hierarkier - många nivåer OOP F10:2 Djur Rovdjur Hovdjur Fåglar Fiskar Björn Kattdjur Ko Lamm Hjort
Läs merAtt bekanta dig med NetBeans programmeringsmiljö och skriva några enkla program med programmeringsspråket Java.
Laboration 1 Avsikt Att bekanta dig med NetBeans programmeringsmiljö och skriva några enkla program med programmeringsspråket Java. Del 1 Ta fram dokumentet NetBeans5_5.pdf från kurssidan och arbeta med
Läs merF8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander
F8 - Arv ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Arv och subklasser Klasser innehåller attribut och beteenden En subklass ärver dessa från föräldern Detta ger: Återanvänd kod
Läs merObjektorienterad Programmering DAT043
Objektorienterad Programmering DAT043 Föreläsning 3 22/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material) 1 Kom ihåg: Visa Javas API. Nämn att slidesens också har tillhörande text på kurshemsidan.
Läs merDAT043 - Föreläsning 7
DAT043 - Föreläsning 7 Model-View-Controller, mer om klasser och interface (arv, ) 2017-02-06 Designmönstret Observer avläser Observer Observable meddelar Observer avläser En eller flera objekt registrerar
Läs merKlasshierarkier - repetition
Klasshierarkier - repetition Klasser kan byggas på redan denierade klasser, egna och/eller färdigskrivna, genom: I att klassobjekt används som attribut (instansvariabler): har-relation. Exempel: traksystemet
Läs merProgrammering A C# VT 2010. Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08
Programmering A C# VT 2010 Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08 Innehåll Hjälp och referenser... 3 Kap 1 Introduktion... 3 Steg för steg... 3 Kapitel 2 Variabler...
Läs merTDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 TDDE11, 725G90 Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Introduktion OOP Instanser, instansvariabler, instansmetoder
Läs merIdag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.
Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett
Läs merLÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p
UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det
Läs merNågra inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.
Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E Föreläsning 4: Villkor och rekursion Konverterar mellan de grundläggande typerna: >>> int("") >>> int(.999) >>> float().0
Läs merClasses och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Abstract class En abstract class är en class som inte kan skapa några objekt. Syfte:
Läs merTentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)
Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tid: Onsdagen 15 december 2004, 8:30 till 13:30 Plats: M Ansvarig lärare: Katarina Blom, tel 772 10 60. Läraren besöker tentamen kl
Läs merJava, klasser, objekt (Skansholm: Kapitel 2)
Java, klasser, objekt (Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Objectorienterad programmering Sida 1 Vad är en klass? En klass är ett sätt att beskriva en mängd objekt och deras gemensamma
Läs merStatic vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016
Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design Alex Gerdes, 2016 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon tripoly =
Läs merModeller, Objekt och Klasser
Modeller, Objekt och Klasser Bildserie 3 Objekt Orienterad Programmering OO-programmering bygger på att vi som människor uppfattar tillvaron i termer av objekt - Bastu, pizza, öl,... Det borde vara lättare
Läs merTDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning Generiska klasser Undantag Interface Nästlade klasser 1 Problem:
Läs merObjektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim
Objektorienterad programmering Föreläsning 12 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda Introduktion till Arv Superklasser och Subklasser Dolda medlemmar (new och base) Statisk
Läs merTyphierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser
TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser Hur används hierarkier för att modellera nära relaterade typer? Nu:
Läs merDagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?
Programmeringsteknik och Matlab Övning 6 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312
Läs merKopiering av objekt i Java
1 (6) Kopiering av objekt i Java Först När du läser detta papper bör du samtidigt studera dokumentationen för klasserna Object, Cloneable (java.lang) och ArrayList (java.util). Mycket blir klarare genom
Läs merLite modifierad Laboration 1 Körkortsprov för Smalltalk och VisualWorks
Lite modifierad Laboration 1 Körkortsprov för Smalltalk och VisualWorks Vissa anpassningar är gjorda för att passa VisualWorks- 3 991124, dock inte skärmdumpar (vilka är Visual- Works-2) /Björn 1 Inledning
Läs mer1 Funktioner och procedurell abstraktion
1 Funktioner och procedurell abstraktion Det som gör programkonstruktion hanterlig och övergripbar och överhuvudtaget genomförbar är möjligheten att dela upp program i olika avsnitt, i underprogram. Vår
Läs merLab5 för prgmedcl04 Grafik
Lab5 för prgmedcl04 Grafik Viktigt läs detta först:den här labblydelsen är ganska lång, detta betyder inte att labben tar lång tid.en hel del av lydelsen är anvisning om hur man går tillväga för att kunna
Läs merObjekt och referenser
Objekt och referenser Antag att vi har följande enkla klass: public class Person { private String namn; private String adress; private String personnummer; public Person() { namn = NN ; adress = ; personnummer
Läs merInkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private
Inkapsling tumregler Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler Tobias Wrigstad (baserat på material från Tom Smedsaas) 5 november 2010 1. Man skall
Läs merDatalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs
Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera först talet 37 med 2. Använd heltalsdivision. Det ger kvoten
Läs mer725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack
725G61 - Laboration 7 Implementation av ett API Johan Falkenjack December 13, 2013 1 Inledning Hittills i kursen har vi tittat på grundläggande programmering och grundläggande objektorientering. I den
Läs merÖverlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!
Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering! Gränssnitt igen För att kunna ändra på olika delar av programmet utan att andra delar
Läs mer1 Egna klasser. 1.1 En punkt-klass
1 Egna klasser Vi har bekantat oss med klasser genom att se hur vi kan använda olika klasser. I synnerhet klassen Scanner och klassen Math. För scannerklassen skapade vi en instans för att sedan utnyttja
Läs merTDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 TDDE11, 725G90 Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Arv Polymorf UML (klassdiagram) 1 Arv Möt tre studenter
Läs merKlasser och objekt, referenser Grundkurs i programmering med Python
Hösten 2009 Dagens lektion Klasser och objekt Referenser 2 Klasser och objekt 3 KLASSER OCH OBJEKT Relaterat data Information om en fyrkant Bredd Höjd Färg 4 KLASSER OCH OBJEKT Egna datatyper Skapa en
Läs merObjektorienterad programmering
Objektorienterad programmering Föreläsning 7 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda Konstanter och readonly Statiska klasser Standardklassen Math Parameteröverföring Referensen
Läs merDAT043 - föreläsning 8
DAT043 - föreläsning 8 Paket, generics, Java collections framework 2017-02-07 Paket och tillgänglighet Ovanför klasser finns en hierarkisk namespace med paket. Filer som inte deklareras i något paket finns
Läs merMer till P-uppgiften: Dokumentation. Nyheter. Algoritm för sökning. Mer hjälp. DD1311 Programmeringsteknik med PBL
Skolan för Datavetenskap och kommunikation Mer till P-uppgiften: DD1311 Programmeringsteknik med PBL Föreläsning 15 & 16 Hjälpsidor Sökning Rekursion Felhantering Grafiska gränssnitt Nästa tisdag: Mer
Läs merObjekt och klasser - Introduktion
Objekt och klasser - Introduktion Begreppet objekt Hur klasser används för att skapa objekt Fördefinierade klasser Metoder och parameteröverföring Definiera klasser Modifierare Statiska variabler och metoder
Läs merUML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.
Översikt Klasshierarkier UML klassdiagram Relation mellan klasser mellan klasser och objekt Association ning ing andling Programmering tillämpningar och datastrukturer 2 UML UML Unified Modeling Language
Läs mer