Föreläsning 2 Verktyg m.m.
Innehåll Java-paket Utvecklingsmiljö (development environment) Hur man organiserar sin utvecklingsmiljö Verktyg (tools) Editorer, debuggers, IDE's (integrated development environments), m. m. Ingenjörsmässigt arbetssätt Best practices, m.m... 2
Organisation av Java Program Program består normalt av (väldigt) mycket kod Java JDK 1.5, 33762 ncss (non commenting source statements) Koden organiserad i 671 klasser, gränssnitt, enum, m.m. Hur organiserar man program med (väldigt) många klasser, gränsnitt, m.m.??? Eclipse 3.0, 21.000+ klasser Vi behöver en större enhet..! 3
Paket (Packages) [Java] Programs are organized as sets of packages. //Java language Specification 3Ed Chapter 7 Program Paket (UML symbol) 4
OBS: Begrepp En applikations delar Paket? Moduler? Komponenter? Subsystem? Oklara begrepp Ibland samma sak, ibland olika, ibland överlappande,... Finns ingen allmänt accepterad definition 5
Paketmedlemmar Paketmedlemmar är klassertyper (class, enum), gränssnittyper (interface, m.fl.) och (sub) paket Unika namn inom paketet Eftersom paket kan vara medlemmar får vi en hierarki, återkommer... I fortsättningan; Typ = class, interface eller enum 6
OBS: Språk All programutveckling sker på Engelska Alla filer/kataloger på Engelska Alla kod skrivs på Engelska (även kommentarer) Undvik namn med, : och liknande 7
Paketdeklaration Anger i vilket paket typen ingår Anges först i filen m.h.a. package // File Operator.java package calculator; public class Operator { Typer tillhör exakt ett paket Anges inget tillhör det default package Paketnamn skrivs med enbart små bokstäver 8
Subpaket Subpaket anges med punktnotation toplevel.sub.subsub //Subpackage of calculator package calculator.gui; public class MainFrame { 9
Paket och Synlighet Default: Typer bara synliga inom paketet package calculator; class Operator{ //Use in calculator only } Kan göras tillgänglig för andra paket package calculator; public class Operator { } Undantag: java.lang.* (importeras automatiskt) 10
Paket och Synlighet (forts) Om man utelämnar accesspecificationen (public, private, protected) gäller paketsynlighet Typer i samma paket kommer alltså åt instansvariabler, dåligt Ange alltid access 11
Kvalificerade typnamn Kvalificerade typnamn = paketnamn + typnamn package calculator.gui; public class MainFrame { } // Fully qualified name calculator.gui.mainframe 12
Unika kvalificerade typnamn Måste ha unika typnamn Skall inte uppstå problem då man t.ex. hämtar kod från nätet Skapa unika kvalificerade typer genom ett antal inledande tomma paket // edu.chl.hajo just to make type name // unique (no types in packages) package edu.chl.hajo.calculator.gui public class MainFrame { 13
Import deklarationer Om man använder typer från anda paket Måste referera till en typens kvalifierade namn Jobbigt att skriva En import-deklaration gör att man kan använda det okvalificerade typnamnet En ren bekvämlighet Inget speciellt händer Ibland problem (måste ange kvalificerat namn) java.util.date och java.sql.data (i samma klass) 14
Pakettillhörighet Hur placera typer i paket? Icke-trivialt (finns inget givet svar) Logiskt sammanhörade i samma paket De utför tillsammans en bestämd uppgift Kallas ofta subsystem Klasser som representera den data programmet arbeter med Kallas ofta OO-modellen (eller analys modell eller domän modell) Rena hjälpklasser 15
Paket och Filsystem I Java en koppling mellan paket och mappar i filsystemet Ett paket (den logiska enheten) motsvaras av en (sub) mapp i filsystemet (konkret enheten) //Must be in directory calculator package calculator; public class Operator {... //Must be in subdirectory gui of calculator package calculator.gui; public class MainFrame {... 16
Några Typiska Paket edu.chl.hajo.calculator Toppaket för en applikation som skall heta calculator. Innehåller enbart Main-klassen edu.chl.hajo.calculator.gui GUI delar till programmet edu.chl.hajo.calculator.core Klasser so utgör själva kärnan I programmet edu.chl.hajo.calculator.util Diverse hjälpklasser 17
Paket och Programdesign Ingår t.ex. i design mönstret Facade Fördelar Information hiding på typnivå (dölja typer) Minimera beroenden mellan paket Möjligt att byta ut ett helt paket (kanske kommit en effektivare implementation) 18
Nästa Organisationsnivå Om man har väldigt många paket? Skapa jar-filer (bibliotek) med ett antal paket Skapas med kommandot jar jar cvf calculator.jar C bin edu Bygg upp programmet med bibliotek Om man har många bibliotek (med många olika versioner)... Eventuellt; jar hell 19
Utvecklingsmiljö Ett program består av mer än Java-filer Paket, konfigurationsfiler, ikoner, program-externa texter (i18n), testsviter, m.m. Då man startar utvecklingen organiserar man sin miljö Normalt skapas en projektkatalog Ev. redan klart I labbar 20
Källkod och Binärer Vill vi skilja på källkod (source = *.java) och binärer (binaries = *.class) Annars får vi dubbelt antal (snarlika) filer på samma ställe, rörigt class-filer ointressanta arbetar inte med dessa Binärerna kan vi kasta, nya efter varje kompilering 21
Filstruktur Utvecklingsmiljö Struktur projektkatalog (.ep = Eclipse project, mer strax...) myproj.ep // project directory bin // binaries edu // package hierarchy... //...created at compilation src // source edu // package hierarchy... //...created by you 22
OBS: Filhantering Måste ha full kontroll på filer! Vilka har jag? Var de finns? Vad kör jag? Annars: Problem!!! Skulle ha lyssnat på Joachim... 4 timmar senare... 23
Kompilera och Exekvera Java kompilatorn måste veta var alla java-filer finns (en enda rad) javac sourcepath src edu.chl.hajo... Main.java d /bin Java-maskinen måste veta var alla class-filer finns Om du står i projektkatalogen (-v) java cp./bin edu.chl.hajo... Main cp = classpath = där pakethierarkin för binärer börjar Därefter: Kvalificerade namnet på klassen som innehåller main-metoden (enkelt: Den heter Main) 24
Verktyg Vi kommer att använda Open Source Finns gratis på Webben 25
Eclipse i Princip Skapa projekt Kommer att skapa projektkatalogen enligt föregående Lägg till filer och annat m.m. av File > New... Koda, kör, felsök Använd Eclipse för att generera kod Vid behov strukturera om för att få bättre namn m.m. (refactor) Klart: Skapa en jar-fil för leverans till kund 26
Eclipse Begrepp View, ett internt fönster t.ex. Package Explorer Editor, ett fönster där man kan behandla text (i vårt fall bara Java kod) Generellt finns massor med editorer, C/C+ +/PHP/Perl/... Perspective, en viss uppsättning view's och editor's ordnade på ett visst sätt (layout) Vi använder: Java Perspective, Debug perspective Allt finns under Window menyn 27
Eclipse Demo Ni kommer att göra all detta i eftermiddag Demon går för snabbt Eclipse video tutorial här 28
OBS: Eclipse, se upp! Ibland uppdateras inte ikoner m.m. I GUI:et Felmarkeringar ligger kvar. Spara så uppdateras GUI:et Eclipse kompilerar automatisk i bakgrunden hela tiden Men om konstiga saker händer kan man tvinga Eclipse att verkligen kompilera om allt Meny: Project > Clean... 29
Felsökning Läs felutskrifter!!! Läs uppifrån och ner! Skala ner d.v.s. kommentera bort bit för bit till felet försvunnit Avkommentera en bit i taget till felet hittats ALDRIG ta bort (görs då man vekligen vet)!! Använd en debugger Finns inbyggt I Eclipse Undvik System.out.println() 30
Debugger Ett program som kan köra ditt program steg för steg "i slow motion" Kör sats för sats (statement) Före/efter varje sats kan man inspektera variabelvärden m.m. 31
Eclipse Debug Demo Detta kommer ni också att göra... 32
Kodkvalité För att skriva högkvalitativ kod krävs lång och bred erfarenhet Finns böcker Finns samlingar av s.k. best practices d.v.s. hur man erfarenhetsmässigt bör göra Se t.ex. Collected Java Practices Finns gott om verktyg för att analysera kodkvaité t.ex. Findbugs 33
Findbugs Undersöker koden utifrån ett stort antal kvalitets -regler (bug patterns) Bug patterns Statisk analys av binärer Vårt program körs inte Om programmet bryter mot någon regel ges en varning Delar upp felen i olika kategorier Correctness, Bad practice, Dodgy Visar var i källkoden problemet finns 34
Findbugs Demo Ni kommer att göra detta i eftermiddag 35