Programmeringscamp Opbygning og specialisering af klassehierarki. Simulering af en kasselinje

Relaterede dokumenter
Øvelse 9. Klasser, objekter og sql-tabeller insert code here

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16,

Programmeringscamp. Implementer funktionerne én for én og test hele tiden.

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16,

klient Webside Forespørgsel/ Nye data Python program Database kommando svar Database

2. Husk at give execute-tilladelser. I Filezilla højreklikker I på den overførte file, så vælger I fileattributes og sætter kryds i execute.

klient Webside Forespørgsel/ Nye data Python program Database kommando svar Database

Indholdsfortegnelse If-sætningen... 3 Opgaver... 4 OR, AND sammen med if-sætningen... 5 Rand() funktion... 5 Opgave... 5 Include() funktionen...

Introduktion til programmering

Introduktion til datastrukturer. Philip Bille

HTML, PHP, SQL, webserver, hvad er hvad??

Indholdsfortegnelse Databaser og PHP... 3 Opgave... 4 Opgave... 5 Opgave... 6 Sidste opgave er en lille gæstebog... 7 Kilder og nyttige links:...

Introduktion til datastrukturer

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Lær Python - Dag 4, modul 2 Objektorienteret programmering

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Abstrakte datatyper C#-version

Skriftlig eksamen i Datalogi

PHP Snippets. De små korte. Skrevet af Daniel Pedersen

Løsning af møntproblemet

Lær Python - Dag 4, modul 1 Objektorienteret programmering

Introduktion til programmering. Uge 38.1 Python 2 Learning Python, kap 8-12.

Deltag i en quiz: Test din viden i SAS -programmering

Introduktion til ActionScript, fortsat

Specialiseringen Rapport Lavede Af Rasmus R. Sørensen Side 1 af 6

DM507 Algoritmer og datastrukturer

SQL Server 2016 Data Adgang

En Kort Introduktion til Oracle

Introduktion til programmering. Afslutning

Eksamen, DSDS, efterår 2008

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

En opsamling af artefakter for Hotel Databasen som REST-service Bygger på Hotel opgaven i 8 trin

Databaseadgang fra Java

Introduktion til ActionScript

Ide med Diff. Mål. Tidsplan. 1.uge: 2.uge:

Lær Python dag 1 - modul 1

Analyse, problemområde, anvendelsesområde

Version Dato Beskrivelse /11/2012 Initial version /03/2013 Tilføjet eksempel med Template Agent, generelt udvidet dokumentet.

Klasser og Objekter i Python. Uge 11

Data lagring. 2. iteration (implement backend)

! Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen.

DM507 Algoritmer og datastrukturer

! Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen.

Projekt database. 3 Semester - Mul a Projekt 1. Yaser Osman cph-mo102@cphbusiness.dk. Dan Eskildsen cph-de32@cphbusiness.dk

Eksamen, DSDS, efterår 2007

Eksamen, DSDS, forår 2009

Programmering I Java/C#

Hent filoplysninger fra billeder og filer

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

Views etc. Databaser

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

DM507 Algoritmer og datastrukturer

Introduktion til funktioner, moduler og scopes i Python

Vejledning Tabeller (data tabeller)

Kursusarbejde 1 Grundlæggende Programmering. Arne Jørgensen, klasse dm032-1a

I denne artikel vil vi bruge en User klasse som vi så vil gruppere på forskellige måder.

Introduktion Indtastning Funktioner Scripts Optimering. Matlab

DRONNINGER (QUEENS) Opgave 1

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter Abstract

DKAL Snitflader REST Register

PHP kode til hjemmeside menu.

Kursusarbejde 3 Grundlæggende Programmering

GIS indlæsning af kreditorer og betalingsform. Brugervejledning 1.0

Stakke, køer og lidt om hægtede lister - kapitel 16 og 17

PHP guide af Daniel Pedersen

DM507 Algoritmer og datastrukturer

Skriftlig eksamen i Datalogi

DM507 Algoritmer og datastrukturer

Udvikling af DOTNET applikationer til MicroStation i C#

Jeg har i forbindelse med it og programmering designet og udviklet et it-produkt, som kan beregne rødder i en anden gradsligning.

Martin Geisler. Uge 49, 2001

Tagwall med Php & MySQL

Sådan kan du sende data fra din egen hjemmeside til JitBesked via en HTML-JDF.

Database programmerings tips

Introduktion til Oracle, Datalogi, RUC Af: Jens Lauterbach 2002

Datastrukturer (recap) Datastruktur = data + operationer herpå

DM507 Algoritmer og datastrukturer

Aftenskole i programmering sæson Flere registreringer. Sæson 2 - Lektion 8

Aarhus Universitet, Science and Technology, Computer Science. Exam. Wednesday 27 June 2018, 9:00-11:00

Eksempel på en database: studenter, kurser, eksamener

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

SWC eksamens-spørgsmål. Oversigt

Programmering C RTG

Forelæsning Uge 5 Mandag

Anne Randorff Højen

Projekt 1 Database. Cphbusiness Lyngby Multimediedesigner, 3. semester mul-a12e, gruppe 1

Projekt 3: Interaktionsudvikling 11/04.14

Indhold. Side 2 af 26

Interaktionsudvikling

Data load og udtræk. 2. iteration: implmentation (test af backend) PHP mysql. Loade og parse XML (SimpleXML, Xpath) Filhåndtering i PHP JSON

DM507 Algoritmer og datastrukturer

Langtved Data A/S Nyhedsbrev

Programmering og Problemløsning, 2017

Stakke, køer og lidt om hægtede lister

Modern Concurrency Abstractions for C#

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Reeksamen, DSDS, forår 2008

Transkript:

Programmeringscamp Opgave 9 var helt tydeligt for svær det var imponerende at 7 faktisk afleverede! Vi bruger uge 48 til at gå lidt grundigere igennem objektorienteret programmering, specielt teknikken med at subklasse klasser fra andre moduler. Grunden til at det er vigtigt ligger dels i systemudviklingskurset til foråret hvor objektorienteret analyse og design (ikke programmering! vil spille hovedrollen, dels i semesteropgaven hvor en løsningsmulighed er at genbruge ting fra de moduler der er udleveret. Tidspunkerne er: Mandag d. 27, 8-10 Onsdag d. 29, 15-17 Torsdag d. 30, 14-17 De studerende der har afleveret opgave 9 kan nøjes med at lave opgave 9.1 og 9.2. Studerende der ikke fik afleveret opgave 9, laver 9.1, 9.2 og 9.3 hvor 9.3 er en nemmere version af den oprindelige opgave 9. 9.1. Opbygning og specialisering af klassehierarki. Simulering af en kasselinje Opgaven træner i at opbygge en abstrakt datastruktur og at specialisere klasserne til en konkret applikation. Opgaven går ud på først at implementere den abstrakte datastruktur en kø som beskrevet i slides 43: En kø er FIFO: first in first out Har følgende metoder: enqueue(elem indsæt et element bagerst i køen dequeue( fjern elementet forrest i køen og returner dette. size( returner tal der angiver køens længde isempty( returner Boolean der angiver om køen er tom Brug nedenstående diagram til at gøre dette. Hint: brug en liste til at implementere køens medlemmer. Lad halen af køen være element nummer 0 i listen, og hovedet være sidste element i listen. I diagrammet er der to hjælpefunktioner, head( der finder hovedet af køen hvis køen ikke er tom, og ellers returnerer None, og tail( der finder halen af køen.

2 Specialiser dernæst Element til en Kunde og Queue til en Kasselinje. Kunden skal besidde en liste af varer han har købt. En vare har egenskaben pris. Specialiser dequeue så den kalder modtagbetaling der tæller priserne sammen og lagrer totalbeløbet i variablen bon. Definer en funktion udskrivbon der udskriver bon en. Specialiseringen af dequeue kan foregå således: def dequeue(self: kunde = Queue.dequeue(self self.modtagbetaling(kunde return kunde hvor Queue.dequeue(self genbruger overklassen Queue s dequeue-funktion. En kørsel kunne se således ud: if name == " main ": #den abstrakte kø 'Den abstrakte kø' #lav en kø aqueue = Queue('kasse A' #indsæt 4 elementer i køen for n in ['a','b','c','d']: 'indsæt ' + n aqueue.enqueue(element(n #udskriv køen aqueue #fjern hovedet i køen indtil den er tom while not(aqueue.isempty(: 'fjern ', aqueue.dequeue(

3 #udskriv køen aqueue #kasselinjen 'Specialiseringen kasselinjen' #lav to kunder jensen = Kunde('Jensen',[Vare('ost',53,Vare('mælk',10] hansen = Kunde('Hansen',[Vare('tobak',60,Vare('øl',36] #lav en kasselinje aqueue = KasseLinje('kasse A' #indsæt kunderne i kasselinjen for n in [jensen,hansen]: 'indsæt ', n aqueue.enqueue(n #jensen fristes af slikposerne jensen.tagvare(vare('slik',20 # køen aqueue #ekspeder kunderne indtil køen er tom while not(aqueue.isempty(: 'Ekspedition: ',aqueue.dequeue(,aqueue.udskrivbon( # køen aqueue med resultatet Den abstrakte kø indsæt a indsæt b indsæt c indsæt d a b c d fjern a fjern b fjern c fjern d nothing Specialiseringen kasselinjen indsæt Jensen indsæt Hansen Jensen Hansen Ekspedition: Jensen Bon, total: 83 Ekspedition: Hansen Bon, total: 96 nothing 9.2. Brug af underklassificering af klasser i eksisterende moduler Opgaven træner i at definere underklasser af mere generelle klasser der er gjort tilgængelige i et modul. Her er modulet composite som er blevet gennemgået. I skal underklassificere klasserne Samling og Simpel i composite-mønstret så de kan repræsentere en bygning og dens dele som vist i figuren.

4! Start jeres program med from composite import * der importerer alle klasser fra modulet composite (husk at composite skal ligge i samme mappe som jeres program. De nye klasser Bygning, Etage og Kontor skal føre kontrol med at kun etager kan være del af bygninger og kun kontorer kan være del af etager. De skal give fejlmeddelelse hvis man forsøger at tilføje en ukorrekt del. Det kræver en tilføjelse til den nedarvede tilfoej-funktion. Man kan bruge funktionen isinstance(objekt, klasse til at teste om objektet er medlem af klassen. Den modificerede tilfoej-funktion kan følge nedenstående skema der stadig benytter sig af Samling s tilfoej-funktion. def tilfoej(self,etkontor: if <etkontor tilhører klassen Kontor>: Samling.tilfoej(self,etKontor. else: 'Galt. Kun kontorer kan være dele af en etage' De nye klasser skal have de nye attributter der er vist i figuren. I skal definere en udskriv-funktion der producerer en beskrivelse af klassernes instanser som vist neden for. Bygning:

5 Etage: Etage: E2 Kontor: Kontornummer: K165 Beboer: Steffen Brandorff Telefon: 9234 Etage: E1 Det kræver at delene har adgang til den helhed de er en del af, og det kræver igen en ny tilføjelse til den nedarvede tilfoej-funktion: delen skal forsynes med en variabel der peger på helheden. En kørsel kan se således ud hvor output er vist i kursiv: Etage2 = Etage('E2' Etage1 = Etage('E1' Etage0 = Etage('E0' Wiener = Bygning('Wienerbygningen','Helsingforsgade 14, 8200 Århus N' Wiener.tilfoej(Etage2 Wiener.tilfoej(Etage1 Wiener.tilfoej(Etage0 Etage2.tilfoej(Kontor('K232','9250','Peter Bøgh Andersen' Etage2.tilfoej(Kontor('K265','9260','Claus Bossen' Etage1.tilfoej(Kontor('K165','9234','Steffen Brandorff' Wiener (Wienerbygningen (E2 (K232 (K265 (E1 (K165 (E0 no parts Wiener.udskriv( Etage2.udskriv( Etage: E2 Etage2.hent('K232'.udskriv( Kontornummer: K232 Beboer: Peter Bøgh Andersen Telefon: 9250 Etage: E2 Etage1.hent('K165'.udskriv( Kontornummer: K165 Beboer: Steffen Brandorff

6 Telefon: 9234 Etage: E1 Etage2.fjern(Etage2.hent('K232' Wiener (Wienerbygningen (E2 (K265 (E1 (K165 (E0 no parts Hvis I er usikre på hvilke attributter og metoder et objekt indeholder, kan I kalde introspect funktionen: Etage1.hent('K165'.introspect( Dictionary: {'beboer': 'Steffen Brandorff', 'delaf': < main.etage instance at 0x0118E260>, 'telefon': '9234', 'navn': 'K165'} Attributes and functions: [' doc ', ' init ', ' module ', ' str ', 'beboer', 'beskrivelse', 'delaf', 'introspect', 'navn', 'telefon', 'udskriv'] 9.3. Ændring af og tilpasning af modul I modulet OOogSql1 er der en funktion maketable(tablecontents der tager en liste af lister som input og blot returnerer en tekstuel version af listen. I stedet for linjen htmltabel = str(tablecontents skal I indsætte den funktion I tidligere lavede, som konverterer en liste af lister til en html-tabel. I selve kørselsdelen efter if name == " main " skal I ændre koden så den kan køre med data fra jeres egen database. Hvis I er usikre på hvilke attributter og metoder et objekt indeholder, kan I kalde introspect funktionen: 'Introspect a Table' atable.introspect( 'Introspect a Row' arow.introspect( 'Introspect a Selection' aselection.introspect( Det giver følgende resultat: Introspect a Table Dictionary: { 'values': [['1111111111', 'Jeppe Boegh', 'Andersen', 'Thorsgade 20', '8410', 'dreng', '', '86379790', 'Baltica', '1111111112', '1111111113', '1111111114'], ['1111111114', 'Lotte Boegh', 'Andersen', 'Thorsgade 20', '8410', 'pige', '', '86379790', 'Baltica',

'1111111112', '1111111113', '1111111114'], ['1111111115', 'Stine', 'Jacobsen ', 'Thorsgade 20', '8410', 'pige', '', '86379790', 'baltica', '', '1111111116', '1111111114']], 'columnnames': ['cpr', 'firstname', 'lastname', 'address', 'city', 'gender', 'email', 'phone', 'insurance', 'hasfather', 'hasmother', 'hasdoctor'], 'rows': [< main.row instance at 0x012262B0>, < main.row instance at 0x012267B0>, < main.row instance at 0x012268C8>], 'tablename': 'Child', 'primarykey': 'cpr'} Functions: [' doc ', ' init ', ' module ', 'columnnames', 'getprimary- Key', 'getrow', 'introspect', 'makehtmltable', 'primarykey', 'Contents', 'rows', 'tablename', 'values'] Introspect a Row Dictionary: { 'values': ['1111111111', 'Jeppe Boegh', 'Andersen', 'Thorsgade 20', '8410', 'dreng', '', '86379790', 'Baltica', '1111111112', '1111111113', '1111111114'], 'columnnames': ['cpr', 'firstname', 'lastname', 'address', 'city', 'gender', 'email', 'phone', 'insurance', 'hasfather', 'hasmother', 'hasdoctor'], 'tablename': 'Child', 'primarykey': 'cpr'} Functions: [' doc ', ' init ', ' module ', 'columnnames', 'delete', 'get', 'getprimarykey', 'insert', 'introspect', 'makehtmltable', 'primarykey', 'Contents', 'put', 'putallvalues', 'tablename', 'update', 'values'] Introspect a Selection Dictionary: { 'columnnames': ['cpr', 'firstname', 'lastname'], 'values': (('1111111115', 'Stine', 'Jacobsen ',} Functions: [' doc ', ' init ', ' module ', 'columnnames', 'introspect', 'makehtmltable', 'Contents', 'values'] 7