GP 3, 12/9 20011 Grundlæggende programmering Efterår 2001 Forelæsning 3 onsdag 12/9 2001 kl. 9:15 – 12:00.

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

07 – Kort om OO Introduktion.
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Selve objektet versus referencen til objektet Nedarvning
Grundlæggende programmering Efterår 2001
GP 4, 19/ Grundlæggende programmering Efterår 2001 Forelæsning 4 onsdag 19/ kl. 9:15 – 12:00.
Hvordan man skriver koden.
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
FEN IntroJava AAU1 Opsamling: afvikling af Java-programmer Input fra keyboard og fil Fra en prompt Fra BlueJ Fra NetBeans.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Delphi og C++ Builder C++ Referencer og pointere.
Begreber og Redskaber 2. Plan for idag Noget om bestanddelene i et programmeringssprog Syntaksbeskrivelse af java Næste gang: –Binære tal –Repræsentation.
Forelæsning 3.1 Collections Javas for-each løkke
Delphi og C++ Builder C++ Builder. C++ Historie Sproget blev designet for AT&T af danskeren Bjarne Stoustrup En objektorienteret videreudvikling.
GP6, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 6 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
GP 11, 14/ Grundlæggende programmering Efterår 2001 Forelæsning 11 onsdag 14/ kl. 9:15 – 12:00.
Fundamentale datastrukturer
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
GP 5, 26/ Grundlæggende programmering Efterår 2001 Forelæsning 5 onsdag 26/ kl. 9:15 – 12:00.
Objekter og klasser Rasmus D. Lehrmann DM
GP 6, 13/ Grundlæggende programmering Forår 2002 Forelæsning 6 onsdag 13/ kl. 9:15 – 12:00.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Procestræ under afvikling af cp init login shell cp cp src dest.
GP 6, 3/ Grundlæggende programmering Efterår 2001 Forelæsning 6 onsdag 3/ kl. 9:15 – 12:00.
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
11 - Exceptions. 2 NOEA2009Java-kursus – Exceptions Hvad er en exception? En undtagelse. Typisk en fejl der opstår runtime Afbryder det normale programflow.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Længste plateau En klassisk problemstilling (Gries, 1981) - og her i Java!!! Denne opgave drejer sig om at bestemme længden af det længste plateau i en.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Repetition af dIntProg v/ Morten D. Bech. Tour de force Variabler Løkker Comparable ImErKo-reglen Eksamenssæt dIntProg, E13.
GP4, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 4 Vi begynder Slides ligger på hjemmesiden. Du er velkommen til.
GP3, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 3 Vi begynder Slides ligger på hjemmesiden. Du er velkommen til.
Forelæsning 7.1 – repetition
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
DAIMIIntroducerende objektorienteret programmeringkd.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Indledende Programmering Uge 6 - Efterår 2006
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation,
 Jens Bennedsen 2001Multimedie programmering3A.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
Klasser og objekter. dIntProg, F08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Forelæsning Uge 4 – Torsdag
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 2 – Mandag
Klasser og objekter (Afsnit i manualen).
Forelæsning Uge 2 – Mandag
Forelæsning Uge 4 – Torsdag
Præsentationens transcript:

GP 3, 12/ Grundlæggende programmering Efterår 2001 Forelæsning 3 onsdag 12/ kl. 9:15 – 12:00

GP 3, 12/ Dagens program Det praktiske Klasser og objekter i Java: –klassedeklarationer –instansvariable –metodedeklarationer

GP 3, 12/ Det praktiske Opgaveaflevering: Husk at aftale med Jeres instruktor, hvordan opgaver skal afleveres. (Hvis ikke andet er aftalt, læg da besvarelserne i dueslaget ”Grundlæggende Programmering” uden for studieadministrationen.)

GP 3, 12/ while-løkker ordre true betingelse false while ( betingelse ) ordre Syntaks : Udførelsesorden: while-løkken kører sålænge betingelse er sand. Ordren under while hedder løkkekroppen og kan være en blokordre.

GP 3, 12/ Halvering (diskret logaritme) public class Logarithm { // diskret logaritme base 2; // argument skal være positiv public int log2(int n) { int log = 0; while (n > 1) { log++; n /= 2; } return log; }

GP 3, 12/ do-løkker true betingelse ordre false do ordre while ( betingelse ) Syntaks : Udførelsesorden: do-løkken kører sålænge betingelse er sand. Løkkekroppen udføres mindst 1 gang!

GP 3, 12/ for-løkker ordre true betingelse false optælling initialisering for (initialisering; betingelse; optælling) ordre Syntaks : initialisering er normalt en initialiseret variabelerklæring (f.eks. int n=0). Hvis betingelse er udeladt, betyder det ’true’. optælling er normalt en eller flere tildelinger (f.eks. n++, m++)

GP 3, 12/ betingede ordre (uden else-gren) betingelse false ordre true if ( betingelse ) ordre Syntaks : betingelse udføres altid 1 gang. ordre udføres 0 eller 1 gang.

GP 3, 12/ betingede ordre (med else-gren) betingelse ordre1 true false ordre2 if ( betingelse ) ordre1 else ordre2 Syntaks : betingelse udføres altid 1 gang. kun en af ordrene ordre1 og ordre2 udføres.

GP 3, 12/ block-ordre Flere ordre kan grupperes til en blokordre. En blok(ordre) indikeres med krøllede parenteser: { ordre1; ordre2;...} En blokordre kan bruges alle steder, hvor en ordre er påkrævet.

GP 3, 12/ Flervejsvalg: Switch-ordre Switch-ordren har den generelle form switch (heltals-udtryk) { case heltal : ordrer case heltal : ordrer. case heltal : ordrer default : ordrer } Hvert sæt af ordrer ender som regel med ordren ‘break' eller ‘return‘. Alle ‘case’ tallene skal være forskellige. Udtrykket heltals-udtryk udregnes til et heltal n. Hvis der er en case-gren mærket n, så fortsætter programudførelsen med den gren. Hvis ingen case-gren er mærket n, så fortsætter programudførelsen med default-grenen hvis der er en; ellers sker der ingenting.

GP 3, 12/ skala public class Karakter { public static void main(String[] args) { int k = Integer.parseInt(args[0]); System.out.println(karakterTekst(k)); } static String karakterTekst(int karakter) { switch (karakter) { case 13: return "For den usædvanlig selvstændige og udmærkede præstation."; case 11: return "For den udmærkede og selvstændige præstation."; case 10: return "For den udmærkede, men noget rutineprægede præstation."; case 9: return "For den gode præstation, der ligger lidt over middel."; case 8: return "For den middelgode præstation."; case 7: return "For den ret jævne præstation, der ligger lidt un..."; case 6: return "For den netop acceptable præstation."; case 5: return "For den usikre og ikke tilfredsstillende præstation."; case 3: return "For den meget usikre, meget mangelfulde og util..."; case 0: return "For den helt uantagelige præstation."; default: return "Karakter er ikke gyldig."; }

GP 3, 12/ Gennemfald Udeladelse af ordren ‘break’ betyder at programudførelsen ‘falder igennem' til næste sæt ordrer. Dette bruges når flere tilfælde (`cases') skal udføre samme ordrer. Ordren ‘break’ kan udelades hvis den sidste ordre i en case gren er return. Ellers skyldes udeladelse af `break’ som regel en forglemmelse -- en hyppig kilde til fejl i C, C++ og Java-programmer!

GP 3, 12/ Typisk brug af gennemfald // Length of the months (non-leap years) public class Days4 { public static void main(String[] args) { int mth = Integer.parseInt(args[0]); System.out.println("Måned " + mth + " har længde " + monthlen(mth)); } static int monthlen(int mth) { switch (mth) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 2: return 28; case 4: case 6: case 9: case 11: return 30; default: return 0; }

GP 3, 12/ Månedslængde // Length of the months (non-leap years) public class Days5 { public static void main(String[] args) { int mth = Integer.parseInt(args[0]); int year = Integer.parseInt(args[1]); System.out.println("Måned " + mth + " har længde " + monthlen(mth,year) + " i år " + year); } static int monthlen(int mth, int year) { switch (mth) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 2: if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) return 29; else return 28; case 4: case 6: case 9: case 11: return 30; default: return 0; } } }

GP 3, 12/ Pas på med gennemfald // Length of the months (non-leap years) public class Switch { public static void main(String[] args) { sw(42); System.out.println("----"); sw(4); System.out.println("----"); sw(7); System.out.println("----"); sw(12); } static void sw(int n) { switch (n) { case 23: case 3: System.out.println("A"); break; case 32: case -2: case 42: System.out.println("B"); case 12: case 8: System.out.println("C"); break; case 34: System.out.println("D"); default: System.out.println("F"); case 7: System.out.println("G"); } Hvad udskriver programmet for sw(42), sw(4), sw(7) og sw(12)?

GP 3, 12/ Klasser og objekter En klasse repræsenterer et begreb: tidspunkt, aftale, bil, ko, person, terning, tegnemaskine, osv. Et objekt repræsenterer en bestemt ting, en instans af et begreb: kl. 8:08 i dag, vejledningsmødet med Jakob og Ole i morgen, min VW Passat, Nanna med den lille kalv, Mads Tofte, den røde terning i min udgave af Matador, den tegnemaskine som har lige tegnet den store firekant, osv.

GP 3, 12/ Klasser i Java Klassen beskriver: –hvilke instansvariable hvert objekt af klassen har (objektets tilstand) –hvilke konstruktorer klassen har, som kan bruges for at skabe objekter fra klassen(“instansiere klassen”) –hvilke metoder hvert objekt af klassen har –plus andre ting, vi ikke beskæftiger os med endnu. Java har en række indbyggede klasser: String, Random, osv. Vi bruger en klasse ved at: –lave et nyt objekt ved hjælp af klassens konstruktorer; –invokere en metode på et objekt –tilgå en instansvariable på et objekt Vi definerer en klasse ved at angive i en klassedefinition: –de instansvariable hvert objekt af klassen vil have –en eller flere konstruktorer for at instansiere og initialisere nye objekter –programkode for de metoder hvert objekt har.

GP 3, 12/ Tid class Time { int hours = 0; int min = 0; } class Time1 { public static void main(String[] args) { Time t1; t1 = new Time(); // Lav et objekt fra klassen Time; tildel objektets navn til t1 t1.hours = 12; // Tildeling til instansvariable i objektet t1.min = 35; Time t2 = new Time(); // Erklæring med initialisering t2.hours = 14; } Instansvariable Ingen eksplicit konstruktor: Java tilføjer automatisk konstruktor Time(){} Ingen metoder!

GP 3, 12/ Instansvariable En instansvariable (felt) indeholder på et givet tidspunkt altid en værdi af den type i instansvariablens deklaration. En værdi kan være af primitive type (int, double, boolean) eller den kan være en objektreference. En objektreference er et objekts addresse i computerens lager. Et objekt har altid den samme unikke addresse, forskellig fra alle andre objekters addresser. En variable indeholder kun addressen på et objekt, ikke selve objektet. Tildeling var1 = var2 kopierer indeholdet fra var2 og gør det nye indhold af var1. Hvis var2 indeholder en objektreference er kun objektreferencen kopieret, ikke objektet selv!

GP 3, 12/ Konstruktorer En konstruktor er en speciel metode for at lave et nyt objekt med et nyt navn, allokere plads til det i computerens lager, og returnere en reference til objektet; dvs. addressen, hvor objektet ligger. En konstruktor: –skal have samme navn som klassen –returner ikke nogen værdi –har ikke nogen returtype, ikke engang void –bruges ofte for at initialisere instansvariablerne i det nye objekt. Hvis klassen ikke indeholder nogen konstruktor, definerer Java en default konstruktor uden parametre, som kun allokerer objektet, men ikke gør yderligere. En konstruktor invokeres således: new Klassenavn ( argumenter )

GP 3, 12/ Metoder Metoder i et objekt gør det muligt at ændre tilstanden eller kigge på tilstanden. En metode består af programkode, som kan –opdatere og/eller vise indholdet af instansvariablene; –skabe nye objekter; –kalde metoder på sig selv eller andre objekter; –returnere en værdi. En metodekald kan dermed: –have umiddelbar synlig effekt (uddata eller tegninger vises i et vindue, inddata læses fra et terminal eller en fil, etc.) –påvirke programmets interne tilstand ved opdatering/skabelse af et eller flere objekter.

GP 3, 12/ Metodehoved char calc (int num1, int num2, String message) metodenavn returtype parameterliste Parameterlisten specificerer type og navn for hvert parameter. Metodesignaturen består af: metodenavn efterfulgt af typerne af alle parametre (men ikke deres navne).

GP 3, 12/ Metodekrop Efter metodehovedet kommer metodekroppen: char calc (int num1, int num2, String message) { int sum = num1 + num2; char result = message.charAt (sum); return result; } Returudtrykket skal være konsistent med returntypen. sum og result er lokale variable. Nye lokale variable allokeres automatisk hver gang metoden er kaldt og deallokeres automatisk når metoden returner.

GP 3, 12/ Parameteroverførsel Når en metode bliver kaldt (invokeret), kopieres argumenterne til parametrene i metoden, som svarer til variabeltildelinger. char calc (int num1, int num2, String message) { int sum = num1 + num2; char result = message.charAt (sum); return result; } ch = obj.calc (25, count, "Hello");

GP 3, 12/ Metodekald myMethod(); myMethodcompute

GP 3, 12/ Metodekald... doIt helpMe helpMe(); obj.doIt(); main

GP 3, 12/ Virkefelt af lokale variable og parametre Virkefeltet (eng. scope) for en variabel er den del af programmet hvor variablen er synlig og kan refereres (bruges): –en lokal variabel har virkefelt fra det sted, hvor den erklæres og til slutning af den blok den er erklæret i. –en lokal variabel erklæret lokal i en for-løkke har kun virkefelt i for-løkken –en parameter har virkefelt i hele metoden eller konstruktoren. En lokal variabel skal være initialiseret før den må bruges.

GP 3, 12/ Halvering igen public class Logarithm { // diskret logaritme base 2; // argument skal være positiv public static int log2f(int n) { for (int log=0; n>1; log++) n /= 2; return log; } Hvad er galt her?

GP 3, 12/ Virkefelt af instansvariable En instansvariabel har virkefelt i hele klassen, også tekstuelt før instansvariablens erklæring. Men lokale variable og parametre kan skygge for instansvariable. this kan benyttes til at tilgå `overskyggede' instansvariable. Rækkefølgen af felt-erklæringer og deres placering i klassen er underordnet. Et felt behøver ikke at være initialiseret før det bruges. Et felt initialiseres automatisk til 0 (int) eller 0.0 (double) eller '\000‘ (char) eller false (boolean) eller null (klasser).