Översikt Programmering tillämpningar och datastrukturer 729G58 (HKGBB7) rmation Objektorienterad programmering: och objekt Polymorfism Programexempel Programmering tillämpningar och datastrukturer 2 Vad kursen täcker Lärare Objektorienterad programmering Centrala begrepp Examinator Rita Kovordányi, ritko@ida.liu.se Designverktyg: UML Språket Java Kursassistent Tobias Ivarsson, tobiv@ida.liu.se Utvecklingsmiljö NetBeans el. Eclipse Datastrukturer Algoritmer Komplexitet Ingrid Alin Nilsson, Alin.Nilsson@gmail.com Kursadministratör Marie Ekström, marek@ida.liu.se Programmering tillämpningar och datastrukturer 3 Programmering tillämpningar och datastrukturer 4 Kursmål Rekommenderad litteratur Färdigheter i objektorienterad programmering Kommersiella mjukvaruprojekt Testning, felsökning Java är grafikorienterat Programmering av enkla grafiska gränssnitt Grundläggande datastrukturer och algoritmer Skansholm (2005): Java direkt med Swing (5:e upplagan) ISBN: 91-44-03843-7 och/eller Koffman & Wolfgang (2005): Objects, abstraction, data structures and design using Java ISBN: 0-471-66151-1 Programmering tillämpningar och datastrukturer 5 Programmering tillämpningar och datastrukturer 6 1
Kursupplägg Kursupplägg (forts) Föreläsningar varvat med labbar Labbintensiv kurs 1-2 labbtillfällen i veckan (kvartsfart) En tredjedel av tiden lärarledd Du förväntas som student att jobba 4 h på egen hand inför/efter varje föreläsning och lärarlett labbtillfälle Egen inläsning av nödvändig litteratur Råd: Läs inte från pärm till pärm Läs allteftersom kunskaperna behövs Kursen går på kvartsfart Avsikt: Ge tillräckligt med tid för att bli van med Java Se dock till att hålla jämn takt Lätt att glömma vad man redan kunde, om längre uppehåll Programmering tillämpningar och datastrukturer 7 Programmering tillämpningar och datastrukturer 8 Examination Laboration1 Tentamen Gamla tentor: se kurshemsidan U/G/VG Tre labbar Lämna till kursassistent Klassdiagram Väl kommenterad kod Egna tankar om labben (på särskilt blad) Var beredd att svara på muntliga frågor U/G utom på labb3: U/G/VG Grundläggande objektorientering i Java: Instanser Polymorfism Relationer Programmering tillämpningar och datastrukturer 9 Programmering tillämpningar och datastrukturer 10 Laboration2 Laboration3 Datastrukturer och algoritmer: Grafikorienterat äventyrsspel Länkade strukturer Listor, köer Iteration Sortering Simulering av en stormarknad Värld med platser och varelser Egen spelare och fiender Mål: samla poäng, överleva Fienderna letar efter egna spelaren genom Sökningsalgoritmer Programmering tillämpningar och datastrukturer 11 Programmering tillämpningar och datastrukturer 12 2
Java Utvecklingsmiljöer J2SE 1.5 (Java 2 Standard Edition version 1.5) NetBeans Speciellt för Java Ren miljö Få kringbegrepp Eclipse IDE (Integrated Development Environment): NetBeans el. Eclipse Stöder även andra språk (bl.a. C++) Kom ihåg att ställa in Java version (1.5) Emacs eller annan texteditor Programmering tillämpningar och datastrukturer 13 Programmering tillämpningar och datastrukturer 14 Hur starta NetBeans på Unix Välja Java-version i NetBeans > module initadd prog/jdk > module initadd prog/sunstudio > source.login > runide.sh & kör i bakgrunden (IDE = Integrated Development Environment.sh = shellscript motsv.bat i Windows) Obs! Kolla att du har rätt Java-version inställd! (Tools Java Platform Manager) Programmering tillämpningar och datastrukturer 15 Programmering tillämpningar och datastrukturer 16 Kortkommandon i NetBeans Hur starta Eclipse på Unix Alt-Shift-I Importera rätt paket (markören ska stå på den klass som ska importeras) Alt-Shift-F Fixa importer (importerar alla nödvändiga paket som behövs i programmet) Ctrl-Shift-T Kommentera bort dessa rader Ctrl-Shift-D Ta bort kommentarmarkering från dessa rader Ctrl-Shift-F Indentera koden > module initadd prog/jdk > module initadd prog/eclipse > source.login > eclipse & Obs! Ställ in rätt Java-version när du skapar ett nytt projekt! Programmering tillämpningar och datastrukturer 17 Programmering tillämpningar och datastrukturer 18 3
Sätta Java-version i Eclipse Kortkommandon i Eclipse Ctrl-Shift-M Importera rätt paket (markören ska stå på den klass som ska importeras) Ctrl-Shift-/ Kommentera bort dessa rader Ctrl-Shift-/ Ta bort kommentarmarkering från dessa rader Ctrl-Shift-F Indentera koden Programmering tillämpningar och datastrukturer 19 Programmering tillämpningar och datastrukturer 20 och objekt Objektorienterad programmering Klass: Hus, Djur, BankKonto Objekt: mitthus, annashus ludde pettersonskonto : äta kollasaldo Programmering tillämpningar och datastrukturer 22 Namnkonvention Klasshierarki startar med versaler (stor bokstav) Ex. Pingvin Objektreferenser (variabelnamn i allmänhet) startar med gemener Ex. pelle Använd versaler för att skilja åt ord Ex. mittkonto Går från generella klasser i topp Till specifika klasser i botten Superklass subklass Programmering tillämpningar och datastrukturer 23 Programmering tillämpningar och datastrukturer 24 4
Subklasser ärver egenskaper (variabler) Ärver sätt (metoder) : Räcker med att definiera flygförmåga i klassen Fåglar Alla subklasser kommer att kunna flyga (om inget annat anges) Programmering tillämpningar och datastrukturer 25 Programmering tillämpningar och datastrukturer 26 UML Klasshierarki i UML Unified Modeling Language Standardiserat sätt att rita upp sina klasser och visa relationer mellan klasserna I framtiden: automatisk generering av kod Programmering tillämpningar och datastrukturer 27 Programmering tillämpningar och datastrukturer 28 i UML Polymorfism (overriding) Programmering tillämpningar och datastrukturer 29 Programmering tillämpningar och datastrukturer 30 5
Polymorfism Polymorfism Fågel fågel; String fågeltyp; fågeltyp = JOptionPane.showInputDialog( Which bird do you want to create, Penguin (P) or Dove (D)?"); if (fågeltyp == P ) { fågel = new Pingvin(); else { fågel = new Duva(); fågel.flyga(); Fågel.flyga() eller Pingvin.flyga() Polymorfism = många former (knutna till samma namn) Flyga betyder olika saker i olika klasser Vilken metod som kommer att exekveras bestäms av vilket objekt som döljer sig bakom en variabel Finns definition i subklassen är det den som gäller Överskuggar (overrides) definitionen i superklassen Programmering tillämpningar och datastrukturer 31 Programmering tillämpningar och datastrukturer 32 Instansiering class Pingvin extends Rovfågel { boolean flyga() { return false; kan ha många olika instanser Ex. pingvinen pelle Ex. pingvinen kalle Skapas utifrån klassens beskrivning av variabler och metoder Klassen = mall Objekt = instanser byggda från mallen Programmering tillämpningar och datastrukturer 33 Programmering tillämpningar och datastrukturer 34 Instansiering Konstruktor class Pingvin extends Rovfågel { double minvikt; String mittnamn; instans av Pingvin variabler från Object metoddef i Object variabler från Fågel metoddef i Fågel var från Rovfågel metoddef i Rovfågel var från Pingvin metoddef i Pingvin egen kopia referens Pingvin(double vikt, String namn) { minvikt = vikt; mittnamn = namn; boolean flyga() { return false; Programmering tillämpningar och datastrukturer 35 Programmering tillämpningar och datastrukturer 36 6
Konstruktor i Java Skapar ny instans av klassen Objekten måste kunna kommunicera Alltid samma namn som klassen Vanligt tillvägagångssätt: Initiera alla instansvariabler Objektet som tar emot meddelandet måste kunna hantera detta Metoden måste vara definierad för objektet public Person () { ålder = 30; yrke = programmerare ; Ex. rectangle.setwidth(32); mottagare selektor argument Programmering tillämpningar och datastrukturer 37 Programmering tillämpningar och datastrukturer 38 Konstruktor (igen) Bok bläddra framåt: bok.bläddra.framåt; Bok bläddra till sidan 47 bok.bläddratillsidan(47); Konstruktorn utan argument definieras automatiskt av Java Alla variabler sätts till vanliga defaultvärden 0, false, null Skapa ny bok med titeln Java Direkt Öppna boken Definieras dock inte om andra konstruktorer har definierats av dig bok = new Bok( Java Direkt ); bok.öppna(); Då måste även parameterlösa konstruktorn definieras för hand! Programmering tillämpningar och datastrukturer 39 Programmering tillämpningar och datastrukturer 40 Program i Java Program i Java Filstruktur i NetBeans Statisk struktur En samling klassdefinitioner Dynamisk omgivning Objekt skapas och skickar sedan meddelanden till varandra pelle kalle janne Varje klassdefinition i egen fil (hjälpklasser kan finnas i samma fil) Objekt skapas dynamiskt under körning Objekten varierar från körning till körning Måste sättas i gång med ett första anrop I det läget finns det fortfarande inga objekt som kan anropa andra objekt! Programmering tillämpningar och datastrukturer 41 Programmering tillämpningar och datastrukturer 42 7
Main Main Startpunkten för ett program Placeras antingen i huvudklassen eller t.ex. i egen testklass Inga returargument public static void main(string[] args) { <skapa objekt> Tillhör klassen, inte dess instans Kan finnas i flera klasser Anropet > java MinKlass sätter igång programmet main i MinKlass börjar köras Startklassen med main ska ligga först i filen och klassen ska vara public Filnamnet ska vara samma som namnet på denna klass Programmering tillämpningar och datastrukturer 43 Programmering tillämpningar och datastrukturer 44 Filen MinKlass.java HelloWorld public MinKlass { public static void main(string[] args) { // initiera variabler och skapa objekt private StödKlass { // utför mindre stödberäkningar Används bara inom den här klassen public class HelloWorld { public HelloWorld() { // konstruktor public static void main(string[] args) { // main String name = JOptionPane.showInputDialog("Enter your name"); JOptionPane.showMessageDialog(null, "Hello " + name + ", welcome to Java!"); Programmering tillämpningar och datastrukturer 45 Programmering tillämpningar och datastrukturer 46 Enklare I/O, spårutskrift System.out.println( Variabeln + varnamn + har värdet + value); System.err.println( File could not be opened ); Skrivs ut med annan färg Varning för användaren (bättre än en senare totalkrasch) Programmering tillämpningar och datastrukturer 47 8