PROGRAMMERING FÖRDJUPNING JAVA

Relevanta dokument
Programmering B med Visual C

Våra böcker och tillhörande produkter är noggrant kontrollerade, men det är ändå möjligt att fel kan förekomma. Vi tar gärna emot förbättringsförslag.

Adobe PHOTOSHOP ELEMENTS 13

InDesign CS4. Adobe. Fortsättningskurs

Adobe DREAMWEAVER. CS6 Grunder

Photoshop Elements 8. Adobe. Grundkurs

PHOTOSHOP ELEMENTS 11

Photoshop CS4. Adobe. Fortsättningskurs

Objektsamlingar i Java

PHOTOSHOP ELEMENTS 12

Laboration A Objektsamlingar

Chapter 4: Writing Classes/ Att skriva egna klasser.

Objektorienterad programmering D2

Innehållsförteckning. 9 Större projekt Övningsuppgifter...32

Objektorienterad programmering i Java

Dreamweaver CS4. Adobe. Grundkurs

Föreläsning 8: Exempel och problemlösning

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Objektorienterad programmering i Java I

OOP Objekt-orienterad programmering

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Adobe FLASH CS5 GRUNDER

Tentamen i Algoritmer & Datastrukturer i Java

TUTORIAL: KLASSER & OBJEKT

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

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen, EDAA20/EDA501 Programmering

SMD 134 Objektorienterad programmering

Laboration 1 - Grunderna för OOP i Java

Grundläggande programmering med C# 7,5 högskolepoäng

Windows 7. Microsoft. Grundkurs

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Programmering för språkteknologer II, HT2011. Rum

Objektorienterad programmering Föreläsning 2

Inledande programmering med C# (1DV402) Introduktion till C#

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

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

TENTAMEN OOP

725G61 - Laboration 2 Loopar och arrayer. Johan Falkenjack

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

TENTAMEN OOP

Tentamen TEN1 HI

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

DAT043 Objektorienterad Programmering

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

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

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

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

Föreläsning 6: Introduktion av listor

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Laboration 0. Enhetsbokstaven anges med ett kolon efter och man läser ofta ut detta, exempelvis C:(sekolon).

TENTAMEN OOP

Programmering för språkteknologer II, HT2014. Rum

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Föreläsning REPETITION & EXTENTA

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Adobe PHOTOSHOP ELEMENTS 9 FÖRDJUPNING

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

[] Arrayer = Indexerad variabel

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Föreläsning 2 Datastrukturer (DAT037)

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Arv. Objektorienterad och komponentbaserad programmering

Statistik över heltal

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

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

Laboration 10 - Eclipse

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

Tentamen. Lösningsförslag

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

725G61 - Laboration 5 Grundläggande objektorientering. Johan Falkenjack

Tentamen OOP

JAVA Mer om klasser och objektorientering

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

F4. programmeringsteknik och Matlab

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Tommy Färnqvist, IDA, Linköpings universitet

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

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Den som bara har en hammare tror att alla problem är spikar

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

SKAPA DET FÖRSTA PROJEKTET I mikrobasic PRO for AVR

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Objektorienterad Programmering (OOP) Murach s: kap 12-16

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

TDIU01 - Programmering i C++, grundkurs

TUTORIAL: SAMLING & KONSOLL

Att skriva till och läsa från terminalfönstret

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Classes och Interfaces, Objects och References, Initialization

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

Transkript:

PROGRAMMERING FÖRDJUPNING JAVA

Till denna bok medföljer ett antal övningsfiler som du laddar ner från vår webbplats www.docendo.se: 1. Starta webbläsaren, skriv www.docendo.se i adressfältet och tryck på Retur. 2. Skriv artikelnumret, 1260, i sökrutan och klicka på Sök. 3. Klicka på titeln Programmering Java Fördjupning. 4. Klicka på filen 1260.zip högst upp på sidan. 5. Klicka på Spara, välj var du vill spara filen, exempelvis på skrivbordet, och klicka på Spara. 6. När filen har hämtats stänger du dialogrutan och avslutar webbläsaren. 7. Om du har valt att spara filen på skrivbordet visas den som en ikon med namnet 1260. Dubbelklicka på ikonen för att packa upp filerna till lämplig mapp på din hårddisk. Copyright Docendo AB Detta verk är skyddat av upphovsrättslagen. Kopiering, utöver lärares rätt att kopiera för undervisningsbruk enligt BONUS-avtal är förbjuden. BONUS-avtal tecknas mellan upphovsrättsorganisationer och huvudman för utbildningsanordnare, exempelvis kommuner/universitet. Våra böcker och tillhörande produkter är noggrant kontrollerade, men det är ändå möjligt att fel kan förekomma. Vi tar gärna emot förbättringsförslag. Produkt- och producentnamnen som används i boken är ägarens varumärken eller registrerade varumärken. Tryckeri: Elanders - Fälth & Hässler, Sverige 2012 Första upplagan, första tryckningen ISBN: 978-91-7207-967-0 Artikelnummer: 1260 Författare: Jonas Byström Redaktör: Iréne Friberg Omslag: Malina Andrén Bild på omslaget istock

Innehållsförteckning 1 Repetition och lite nytt...5 I detta kapitel... 5 Programexekvering... 5 Källkod... 6 Verktyg... 6 Programexempel... 8 Vanliga standardmetoder...10 Övningsuppgifter... 11 2 Klasser...13 I detta kapitel...13 Kort om objektorientering...13 Lagring av flera typer i en...14 Ett standardexempel...15 Konstruktor...16 Övningsuppgifter...16 3 Referenser...17 I detta kapitel...17 Muterbarhet och referenser i Java...17 Allokera minne...18 Referera en referens...19 Övningsuppgifter... 20 4 Länkade listor...21 I detta kapitel...21 Dubbelriktade länkade listor...21 Gör en adressbok...21 Övningsuppgifter... 28 5 Sortering...29 I detta kapitel... 29 Sortering av arrayer... 29 De vanligaste sorteringsalgoritmerna... 30 Implementera Bubble Sort... 34 Övningsuppgifter...35 6 Mer om Java... 37 I detta kapitel...37 Varianter på medlemsvariabler...37 static... 38 Prefix och postfix... 38 Object-referens... 39 Kort om arv... 39 Övningsuppgifter... 40 7 Hashtabeller...41 I detta kapitel...41 Nycklar och hash...41 Implementera en hashtabell... 43 Testkör och presentera mätdata... 47 Övningsuppgifter... 47 8 Filhantering...49 I detta kapitel... 49 Textfiler... 49 Introduktion till undantag... 50 Binära filer...51 Ladda och visa en bild...51 Övningsuppgifter... 55 9 Java Generics...57 Inbyggda listor i Java...57 Övningsuppgifter... 58 10 Praktisk programmering TCP/IP och trådar...59 I detta kapitel... 59 Sockets... 59 Om chattprogram...61 Analysfas... 63 Designfas... 64 Implementationsfas... 66 Testfas... 67 Övningsuppgifter... 68 11 Praktisk programmering läsa andras kod...69 I detta kapitel... 69 Överblick... 69 Övningsuppgifter...71 12 Nyckelord i Java... 73 Standardiserade nyckelord...73 De vanligaste nyckelorden...74 13 Teckentabell...85 14 Facit...91 Sakregister...105 3

I detta kapitel Du ska nu tillverka någonting användbart med referens på referens och klasser. Nu ska du koppla ihop dessa kunskaper för att göra en mycket enkel adressbok. Dubbelriktade länkade listor I det tidigare exemplet med en länkad lista var listan enkelriktad. Det betyder att det bara gick att leta sig igenom den i en riktning: från det första elementet till det sista. En bättre lista är den dubbelriktade, där man kan söka både framåt och bakåt: null Element 1 Element 2 Element 3 null De dubbelriktade pilarna betyder att de bägge elementen i var ända pekar på varandra. Alla element har en referens till föregående element och till nästkommande element. Det första elementets referens till dess föregående element är null och det sista elementets referens till dess nästkommande element är null. På så sätt kan man lätt hitta det första och det sista elementet i en lista. Gör en adressbok Information till uppgiften Adressboken ska byggas upp med en dubbellänkad lista och för varje person i listan ska det gå att lagra lite information, såsom namn, telefonnummer, gatuadress och stad. Det är lämpligt att du använder ett objekt för varje person. Den sista personen i listan markeras genom att referensen till nästa person är noll. Det betyder att en lista med fyra personer i ser ut som följer: 0 Person 1 Person 2 Person 3 0 Programmet skriver du på engelska. Vi ska ta stöd av kod som medföljer materialet för att skapa en konsoll där vi kan skriva ut och mata in text, på ungefär samma sätt som ett klassiskt konsollprogram. Vidare ska det gå att lägga till, ta bort och skriva ut personer i adressboken. Naturligt nog är det bra om det finns någon funktion för att avsluta programmet. 21

Du skriver programmet 1. Starta NetBeans och skapa ett projekt som du kallar AddressBook. 2. Lägg till Sdb-projektet till ditt projekt (högerklicka på Libraries, välj Add Projects..., dubbelklicka på projektet Sdb). Memorera detta steg så att du kan göra det vid behov i andra program du skapar längre fram. 3. Skriv in följande rader efter public class AddressBook { class Person { public Person ; public Person ; public String name; public String phonenumber; public String streetaddress; public String city; private Person firstperson = null; Som du ser innehåller klassen Person alla personuppgifter som krävs för att klara uppgiften. I följande bild visas ett enkelt diagram över hur objekt av klassen Person kommer att användas. I detta exempel finns det tre personer lagrade i adressboken. firstperson PersonX PersonY PersonZ 0 0 fig. 4.1 Referensen firstperson pekar på det första objektet i listan, PersonX. Medlemsreferensen i det första objektet, PersonX, pekar på null det finns ju inget föregående element! Medlemsreferensen next- Person i PersonX pekar på nästa objekt i listan, som här kallas PersonY. I det andra elementet pekar på det första elementet och på det sista. I det tredje elementet pekar på det andra elementet och pekar på null, eftersom det inte finns något nästa element. Nu är det så bra att det fungerar likadant för en godtyckligt stor lista. En tom lista är en lista helt utan element och därför är referensen till det första elementet i listan (firstperson) lika med 0. 22

4. Skapa en konstruktor i klassen: public AddressBook() { 5. I main skapar du en instans av AddressBook. Orsaken är att main är en så kallad static-metod, vilket betyder att den inte körs mot en instans utan mot klassen, och därför har den inte tillgång till medlemsvariabler. Detta är inget du behöver känna till mer om just nu, men du bör veta att för att kunna läsa och skriva till medlemsvariablerna i AddressBook så måste du instansiera klassen. (Att instansiera en klass är en annat uttryck för att skapa en instans av en klass.) Du gör det så här: new AddressBook(); 6. Skriv in följande rader i konstruktorn: Sdb.createConsole(); System.out.println( Address book. ); boolean quit = false; while (quit == false) { System.out.println( ); System.out.println( Options: ); System.out.println( 1. Print address book ); System.out.println( 2. Add person ); System.out.println( 3. Remove person ); System.out.println( 4. Quit ); System.out.println( Enter your choice (1-4): ); int option = Sdb.in.nextInt(); switch (option) { default: System.out.println( Bad option! ); break; case 1: printaddressbook(); break; case 2: addperson(); break; case 3: removeperson(); break; case 4: quit = true; break; Sdb.closeConsole(); I källkoden kan man se att huvudloopen i programmet ligger i konstruktorn. Det är en while-loop som kommer att snurra till dess att den booleska variabeln quit blir skild från false. Titta längst ner i programmet så ser du att variabeln quit sätts till true om man väljer alternativ fyra. Således kommer alternativ fyra att avsluta programmet. Alla andra alternativ än 1, 2, 3 eller 4 hamnar under default: som ger felutskriften Bad option!. 23

Nu måste du skapa ytterligare tre metoder: en för att skriva ut alla personuppgifter i adressboken (printaddressbook), en för att lägga till personer i adressboken (addperson) och slutligen en för att ta bort personer (removeperson). Dessa metoder kan du lägga ovanför eller under konstruktorn. Skapa printaddressbook så här: void printaddressbook() { Person p = firstperson; while (p!= null) { System.out.println( Name: + p.name); System.out.println( Phone: + p.phonenumber); System.out.println( Street: + p.streetaddress); System.out.println( City: + p.city); p = p.; Referensen p används för att hålla tag i elementet som ska skrivas ut. I fallet med en tom lista kommer firstperson att vara null och då kommer programexekveringen helt att hoppa över while-loopen. Annars kommer, i slutet av while-loopen, p att tilldelas värdet av referensen till nästa element. På detta sätt kommer p i varje ny loop att peka på nästa element i listan detta är en typisk användning av loopar. När p tilldelas värdet av i det sista elementet, så kommer uttrycket i while-satsen att bli falskt och även då avslutas metoden. Detta eftersom i det sista elementet ju är null. Se fig. 4.1 om du känner dig tveksam. 7. Skriv addperson så här: void addperson() { Person p = new Person(); Person q = firstperson; p. = null; p. = q; if (q!= null) { q. = p; firstperson = p; System.out.println( Enter name: ); 24

p.name = Sdb.in.nextLine(); System.out.println( Enter phone: ); p.phonenumber = Sdb.in.nextLine(); System.out.println( Enter street: ); p.streetaddress = Sdb.in.nextLine(); System.out.println( Enter city: ); p.city = Sdb.in.nextLine(); I addperson skapas ett nytt objekt, p, med operatorn new, och en annan referens, q, tilldelas referensen till det första elementet i listan. Nu ska p stoppas in först i listan. Se följande figurer. Referensen till det föregående elementet i p sätts till null, eftersom det nya objektet ska bli det första elementet i listan (1). Nästa element i listan kommer att bli q, och därför sätts referensen till nästa element i p att peka till (2). Sedan kontrolleras om listan tidigare var tom, men om listan inte var tom så måste det element som tidigare var det första peka på det element som nu blir dess föregångare (3). Slutligen i insättningen låter vi firstperson peka på det nya elementet (4), och därmed är listan uppdaterad. (1) P firstperson 0 0 Q... (2) firstperson P 0 0 Q... 25

(3) firstperson P Q 0... (4) firstperson P Q 0... Efter att det nya objektet är instoppat i listan är det bara kvar att fylla i personuppgifterna. Personuppgifterna hamnar direkt i det nya objektet och sedan är metoden färdig. 8. removeperson ska se ut så här: void removeperson() { System.out.println( Enter person s name: ); String nameofperson = Sdb.in.nextLine(); Person p = firstperson; boolean deleted = false; while (p!= null) { if (p.name.equals(nameofperson)) { Person prev = p.; Person next = p.; if (prev!= null) { prev. = p.; if (next!= null) { next. = p.; if (firstperson == p) { firstperson = next; deleted = true; p = p.; 26

if (deleted!= true) { System.out.println( Could not remove \ + nameofperson + \, person not found in address book! ); Först får användaren mata in personens namn, sedan kommer while-loopen att söka efter alla personer i listan med exakt det namnet. För varje person med det namnet kommer det elementet att kopplas från listan. Frånkoppling sker genom att det föregående elementet sätts att peka på nästa element och vise versa; dessutom kontrolleras om elementet som tas bort är det första elementet i så fall måste den globala referensen firstperson sättas att peka på nästa element. Sist i metoden kontrolleras om någon har tagits bort ur adressboken. Om inget namn kunde matchas exakt så skrivs ett felmeddelande ut. Nu är adressboken färdig! Den är flexibel i och med att du kan ta bort personer ifrån vilken plats som helst i listan utan att det blir glapp eller andra problem. 9. Kompilera och testkör. 10. Mata in uppgifter för fem personer, ta bort några personer (från olika delar av listan) och lägg till några nya. Verifiera att programmet verkligen fungerar som det är tänkt! 11. Spara och avsluta NetBeans. 27

Övningsuppgifter Övning 4.1 Övning 4.2 Övning 4.3 Skapa en klass för lagring av matvaror till en dubbelriktad länkad lista. Klassen ska innehålla minst tre publika medlemsvariabler, till exempel för pris. Gör en valfri applikation med dubbelriktade länkade listor. Inget facit ges för denna uppgift. Några förslag på tänkbara program (rangordnade efter svårighetsgrad från enkel till svår): 1. En klasslista som kan lagra information om elevers namn, betyg och födelsedata. 2. En loggbok eller dagbok som bara lagrar datum, tid och text. Man ska kunna söka på datum för att skriva ut gamla noteringar. Om du vill kan du även lägga till sökning på fritext. 3. En applikation för parkeringshus som lagrar info om bilarna som parkeras där, till exempel ankomsttid och registreringsnummer. Priset är tidbaserat och ska anges när ett fordon åker ut ur parkeringshuset. Alla tider ska införas automatiskt, till exempel med metoden System.currentTimeMillis. 4. En applikation för varuhus. Info om varor såväl som anställda ska lagras. Vinst eller förlust ska presenteras med avseende på hur många varor som sålts och hur mycket pengar som utgått i lön. Om du vill kan du lägga till automatiska simuleringssteg som slumpar fram varuförsäljning under en månad och sedan betalar ut månadslöner för alla anställda. Utöka programmet i 4.2: lägg till funktioner för att spara och ladda data i de länkade listorna. Använd klasserna File för att referera en fil. Använd FileReader och BufferedReader för att läsa, PrintWriter för att spara och File.close för att stänga filen igen. Detta är en mycket svår uppgift, och tänkt för dig som kanske kan lite programmering sedan tidigare och ligger före. Det enklaste sättet att lösa uppgiften är att använda ett skiljetecken mellan typ och värde (till exempel kolon, Name:Urban) och att enbart lagra ett värde per rad (så att radslutsteckenet \n blir skiljetecken mellan värden). 28

PROGRAMMERING FÖRDJUPNING JAVA Den här boken lämpar sig för fördjupningskurser i Java. Suc - cessivt kommer du att få prova på objektorienterad pogram - mering med Java. Efter att ha gått igenom boken kan du skapa avancerade projekt med de snabbaste sorterings- och sök - algoritmerna. Du får också en kort introduktion till nätverksprogrammering (med TCP/IP) som du kan använda för att skapa program som kan kom municera över hela världen. I slutet av boken får du också prova på program mering för OpenGL (3D). I boken varvas teoridelar med steg för steg-beskrivningar som är lätta att följa. I tillämpningsuppgifterna får du arbeta självständigt och pröva dina nyvunna kunskaper. Övningsfilerna till boken laddar du ner utan kostnad från vår webbplats docendo.se. Vår serie På rätt kurs är grund- och fördjupningsböcker där du genom att följa instruktioner lär dig viktiga funktioner i programmen. Teoridelar och övningar är sammanvävda och böckerna fungerar både för lärarledd undervisning och självstudier. ISBN 978-91-7207-967-0 9 789172 079670