Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 11 I måndags: programmera effektivt planera skriv tydlig kod använd felsökning teori inkapsling referenser static new, konstruktorer metoder, metodanrop, parametrar, returvärden oföränderliga objekt Idag: exempel Klasserna TelefonKostnad och Punkt
Telefoner Vi ska hjälpa Susannas Import & Export AB med ett program för att hålla reda på kostnaden för de anställdas mobiltelefoner En komponent i programmet ska vara en klass för att hålla reda på kostnaden för en viss mobiltelefon Med en telefon kan man ringa eller skicka SMS
Telefoner Huvudprogrammet talar om för objekt av klassen TelefonKostnad hur telefonen används Huvudprogrammet kan fråga objekten om kostnaden, och be objekten skriva ut sig För varje telefon ska namnet på ägaren sparas Exempel: TelefonKostnad olasmobil = new TelefonKostnad( Ola ); olasmobil.skickasms(); int total = olasmobil.gekostnad(); olasmobil.skrivut(); (skriver ut Ola har anvant 2.01 kr ) Taxor: Öppningskostnad 24 öre Minutkostnad 60 öre SMS 77 öre
PÅ TAVLAN Telefoner Skissa en struktur för klassen TelefonKostnad Vilka instansvariabler, metoder och konstruktorer behövs? Fundera över parametrar och returvärden Synlighet och inkapsling: vilka metoder och variabler ska vara public och vilka ska vara private?
Telefoner, utökning Alla anställda har samma telefonbolag, som ibland ändrar ibland taxan Vi ska utöka klassen så att taxan kan uppdateras Vi behöver nya variabler för taxorna Taxorna är lika för alla inte kopplade till någon specifik telefon Alltså: statiska variabler!
Statiska variabler och metoder Instansvariabler och metoder är alltid kopplade till ett objekt Statiska metoder och variabler är gemensamma för alla objekt av en klass Synonymer: klassmetod, klassvariabel Exempel: metoden main variabeln taxasms typiskt för matematiska funktioner som sin, kvadratroten, fakultet
Mer statiska metoder: Standardklassen Math Innehåller matematiska funktioner, t.ex.: sin (sinus) sqrt (kvadratroten, SQuare RooT ) pow (upphöjt) Statiska metoder: public static double sin(double x) public static double sqrt(double x) public static double pow(double x, double y) Kan användas i matematiska uttryck: double rotenur2 = Math.sqrt(2); double x = Math.pow(10, Math.sqrt(3)); Se Skansholm Se Javas dokumentation: http://java.sun.com/javase/6/docs/api/
Mer statiska metoder: Standardklassen Math Slumptal ges med metoden public static double random() i klassen Math. Returnerar en double mellan 0 och 1 Andra intervall fås genom skalning: double vinkel = Math.random() * 360; Heltal fås genom konvertering: double nollellerett = (int)(math.random() * 2);
Mer statiska metoder: Standardklassen Math Exempel: skriv ut 10 tärningskast Exempelkörning: Tio tarningskast: Kast 1: 6 Kast 2: 6 Kast 3: 5 Kast 4: 2 Kast 5: 5 Kast 6: 1 Kast 7: 6 Kast 8: 1 Kast 9: 4 Kast 10: 4
Mer statiska metoder: Standardklassen Math Exempel: skriv ut 10 tärningskast Fyll i det som fattas: import extra.*; class Tarningar { public static void main(string[] args) { Std.out.println( Tio tarningskast: ); for ( ) Std.out.println( } } );
Klassen Punkt Annas pepparkakor vill beräkna hur pepparkaksformarna ska placeras på degen för att minimera mängden spilldeg eller? En del av programmet behöver objekt som anger ett läge på bakbordet med x- och y- koordinat Vi ska skriva klassen Punkt
PÅ TAVLAN Klassen Punkt Skissa en struktur för klassen Punkt Vilka instansvariabler, metoder och konstruktorer behövs? Fundera över parametrar och returvärden Synlighet och inkapsling: vad ska vara public och vad ska vara private? Behövs statiska variabler eller metoder?
Klassen Rektangel Annas pepparkakor behöver också en klass som representerar rektanglar Vi skriver klassen, och använder oss av Punkt En rektangel representerad med två punkter:
PÅ TAVLAN Klassen Rektangel Skissa en struktur för klassen Rektangel Vilka instansvariabler, metoder och konstruktorer behövs? Fundera över parametrar och returvärden Synlighet och inkapsling: vad ska vara public och vad ska vara private? Behövs statiska variabler eller metoder?
Mittkurs-utvärdering 1. När det gäller hela kursen: Vad är bra? Vad kan förbättras? (Hur?) Skriv på framsidan av postit-lappen 2. Om föreläsningar: Snabbt / långsamt Hur fungerar föreläsningar med OH / BlueJ / tavla? Skriv på baksidan av postit-lappen