GP 6, 13/3 20021 Grundlæggende programmering Forår 2002 Forelæsning 6 onsdag 13/3 2002 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
Programmeringsteknologi: Lektion 1
Selve objektet versus referencen til objektet Nedarvning
GP 2, 13/ Grundlæggende programmering Forår 2002 Forelæsning 2 onsdag 13/ kl. 9:15 – 12:00.
Grundlæggende programmering Efterår 2001
Hvordan man skriver koden.
VOOP, 8 april Refleksion i objekt orienterede programmeringssprog Mandag 8/ Kasper Østerbye.
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.
GP 1, 6/ Grundlæggende programmering Forår 2002 Forelæsning 1 onsdag 6/ kl. 9:15 – 12:00.
Begreber og Redskaber 2. Plan for idag Noget om bestanddelene i et programmeringssprog Syntaksbeskrivelse af java Næste gang: –Binære tal –Repræsentation.
GP 9, 10/ Grundlæggende programmering Forår 2002 Forelæsning 9 onsdag 10/ kl. 9:15 – 12:00.
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.
Mønstre En lille introduktion. Singleton Tilgå et objekt igennem klassereference i stedet for objektreference.  Overflødiggør referencer til objektet.
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
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Repetition: Introduktion til OOP med C# og .NET
GP 3, 12/ Grundlæggende programmering Efterår 2001 Forelæsning 3 onsdag 12/ kl. 9:15 – 12:00.
GP 6, 3/ Grundlæggende programmering Efterår 2001 Forelæsning 6 onsdag 3/ kl. 9:15 – 12:00.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Forelæsning 2.2 Tilstand og opførsel (repetition)
Uge 14: distribuerede objekter, fjernprocedurekald, RMI Tirsdag: Introduktion Mulige fordele ved distribuerede objekter Introduktion til RMI: - Interfacets.
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.
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.
GP 4, 27/ Grundlæggende programmering Forår 2002 Forelæsning 4 onsdag 27/ kl. 9:15 – 12:00.
Grundlæggende programmering Forår 2002
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
Identitet vs lighed. Spørgsmål Hvad udskriver run metoden? 1.”Ens!” 2.”Forskellige!” 3.Ved ikke public class Driver{ public static void run(){ String.
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.
Variabler, klassevariabler, identitet og lighed, collections
 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;
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
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 – Mandag
Klasser og objekter (Afsnit i manualen).
Forelæsning Uge 4 – Torsdag
Præsentationens transcript:

GP 6, 13/ Grundlæggende programmering Forår 2002 Forelæsning 6 onsdag 13/ kl. 9:15 – 12:00

GP 6, 13/ Dagens program Lagermodel for klasser og objekter Indkapsling Overlæsning (overstyring) Overblik over Javas sprogbestanddele (review)

GP 6, 13/ Løbenumre i Konto public class Konto{ private double saldo; private double maxOvertræk; private String ejer; private int kontoNummer; private static int løbeNummer = 1; public Konto(String ejeren) { ejer = ejeren; saldo = 0; maxOvertræk = -3000; kontoNummer = løbeNummer; løbeNummer = løbeNummer +1; }.... } static angiver at det er en klasse variabel. private at den ikke kan ses ude fra. variablen løbenummer får sin værdi når klassen bliver lavet, hvilket er første gang klassen bliver brugt. Man kan aflæse klasse variable som enhver anden variabel Og den kan også tildeles en ny værdi. Resultatet er at enhver konto objekt får sit eget konto nummer.

GP 6, 13/ Lagermodel for klasser og objekter Klasse: Konto løbeNummer: 3 Konto(String ejeren){...} double hæv(double beløb){...} void indsæt(double beløb){...} double aflæsSaldo(){...} void overførTil(Konto modtager,...){...} Kontoobjekt 2: klasse: saldo: 1500 maxOvertræk: ejer: ”Dilbert” kontoNummer: 2 Kontoobjekt 1: klasse: saldo: 2000 maxOvertræk: ejer: ”Kasper” kontoNummer: 1 public class Driver { public static void test(){ Konto kasper = new Konto(“Kasper”); Konto dilbert = new Konto(“Dilbert”); kasper.indsæt( ); kasper.overførTil(dilbert, 1500); } overførTil this: modtager: beløb: returTil: test, li. 5 test args: kasper: dilbert: returTil: prompt call stack heap

GP 6, 13/ private/public på vej til indkapsling Felt eller metode:publicprivatehverken public eller private Synlig i samme klasse ja Synlig i andre klasser i samme pakke janejja Synlig i andre klasser uden for pakken janej

GP 6, 13/ Indkapsling et eksempel… public class Person{ private String name; private int age; public Person(String name){ setName(name); age = 0; } public void setName(String name){ if(name != null && !name.equals(””)){ this.name = name; } public String getName(){ return name; } public void haveBirthday(){ age++; } public int getAge(){ return age; } public class PersonTester{ public void test(){ Person fritz = new Person(”Fritz”); fritz.haveBirthday(); System.out.println(fritz.getName() + ” ” + fritz.getAge()); Person mads = new Person(”Mads”); int fritzAge = fritz.getAge(); int madsAge = mads.getAge(); System.out.println(mads.getName() + ”is older than ” + fritz.getName() + ” is ” + (madsAge > fritzAge)); fritz.setName(”Fritz Henglein”); System.out.println(fritz.getName()); fritz.name = ””; //compile fejl fritz.age = ; //compile fejl }

GP 6, 13/ Indkapsling En klasse er en skabelon for at lave en række ens objekter. Objekter består af instansvariable og metoder. Instansvariablenes værdier udgør objektets tilstand. Metoderne kan aflæse og ændre tilstanden. Oftest er man ikke interesseret i at man ”udefra” – dvs. fra andre objekter, kan manipulere tilstanden direkte, f.eks. ændre saldo på kontoen. Motivationen for dette er at man således får indkapslet det indre af klassen; dvs. isoleret fra resten af programmet. Klassens grænseflade udgør dens public metode signaturer (+returtyper) (og dens public variable) Hvis man ikke ændrer grænsefladen til klassen, så vil klienterne af klassen være uberørt af ændringer i implementationen af klassen.

GP 6, 13/ Den korte udgave felter erklæres privatemetoder erklæres public metoder der kun bruges som hjælpe metode for andre metoder i samme klasse erklæres som private. hvis man udefra har brug for at aflæse et felt, laves en public ”get” metode (accesor). F.eks. getName hvis man udefra har brug for at tildele et felt en ny værdi laves en public ”set” metode (mutator) F.eks. setName(String)

GP 6, 13/ Overlæsning (overstyring, overloading) En klasse kan indeholde flere konstruktorer og metoder med samme navn sålænge deres signaturer er forskellige. Signaturen er konstruktorens, hhv. metodens navn, efterfulgt at typerne af parametrene. Metodens resultat-type indgår ikke i signaturen. Overlæssede metoder med samme navn kan have forskellige resultat- typer. Konto(String ejer, double overtræk){ this.ejer = ejer; this.overtræk = overtræk; saldo = 0; } Konto(String ejer){ this.ejer = ejer; overtræk = -3000; saldo = 0; } // this(ejer, 3000); //constructor chaining void indsæt(double beløb){ saldo += beløb; } void indsæt(String beløb){ saldo += Int.parseInt(beløb); } void indsæt(int beløb){ saldo += beløb; }

GP 6, 13/ Metode overstyring Metode overstyring (overload se 4.5) man kan i den samme klasse have to metoder med samme navn, hvis de har forskellige typer parametre, f.eks. System.out objektet println(String s) println(int i) println(double d) Man bruger ofte overstryring ved kontruktører. F.eks. Dato Dato(int year, int month, int day) Dato(String s) Dato() //today

GP 6, 13/ Overblik over Javas sprogbestanddele Efterfølgende en komplet review af de dele af Java vi indtil nu har gennemgået.

GP 6, 13/ Grundbegreber: værdi, type, variabel En værdi er en størrelse man kan ’regne’ med (f.eks. 117, false, objektreference). –Værdier kan ikke ændres eller ”opdateres”! –Objekter kan opdateres ved at opdatere deres instansvariable, men de er ikke værdier i Java, kun objektreferencer. En type er en familie af værdier (f.eks. int, som er typen af heltal). –En type er enten en basetype (f.eks. int, double, boolean) eller en referencetype (f.eks. String). –Basetyperne er indbygget i Java. Man kan ikke selv definere nye basetyper. –Man kan selv definere nye referencetyper ved at definere klasser. En variabel navngiver en plads (”skuffe” for værdier) i maskinens lager. –En variabel af basetype (f.eks. int) kan indeholde en værdi hørende til basetypen, f.eks –En variabel af referencetype (f.eks. Konto) kan indeholde en reference til et objekt hørende til klassen, eller null. –En variabel kan indeholde forskellige værdier på forskellige tidspunkter. –Variabelnavne kan vælges frit (bortset fra reserverede ord: if, else, for...). –Man bruger normalt lille begyndelsesbogstav i variabelnavne. –Variable skal erklæres før brug. –En variabel-erklæring består af en type efterfulgt af en variabel, eventuelt med en initialisering.

GP 6, 13/ Pakker package edu.it.pakkenavn; class Klassenavn { Felter Konstruktorer Metoder } class Klassenavn { Felter Konstruktorer Metoder } class Klassenavn { Felter Konstruktorer Metoder } Et program er en samling klasser (som kan være en pakke). En klasse indeholder felter, konstruktorer og metoder. En metode består af returtype, signatur og en metodekrop. En metodekrop er en blok, der indeholder erklæringer og ordrer.

GP 6, 13/ Programmer og Java-filer Et program består af en samling klassedefinitioner. Programmets klassedefinitioner kan ligge i en eller flere.java-filer. Skal programmet kunne udføres fra kommandofortolkeren, skal mindst en af klasserne skal indeholde en metode-erklæring af formen public static void main(String[] args) {... } Hvis klassen hedder Driver så kan programmet køres med kommandoen ”java Driver”, som invokerer main-metoden i Driver. BlueJ kan invokere vilkårlige metoder. main-metoden er ikke nødvendig for BlueJ. Hvis en klasse har brug for andre klasser skal de oversatte klassefiler (.class-filer) ligge i samme katalog som Driver eller i klassestien (class path). NB: Klassestien indeholder altid \jre\lib\ext.

GP 6, 13/ Klassedefinitioner En klassedefinition består af: –felt-erklæringer, –konstruktor-erklæringer og –metode-erklæringer. Rækkefølgen er ligegyldig. (men ovennævnte rækkefølge er godt stil) Klassenavne kan vælges frit (bør være sigende) Man bruger normalt stort begyndelsesbogstav i klassenavne (CamelBack style).

GP 6, 13/ Felter/instansvariable En felt-erklæring består af et typenavn efterfulgt at et eller flere feltnavne, f.eks. String mærke, nr_plade, farve; int serie_nr; Et felt kan være static (en klassevariabel). Så navngiver feltet en bestemt plads i maskinens lager. Ellers er feltet et objektfelt (instansvariabel). Så navngiver feltet en separat plads i hvert objekt hørende til klassen. Felter initialiseres altid med en standardværdi (0, false, null) afhængig af feltets type. Feltnavne kan vælges frit. (bør være sigende) Man bruger normalt lille begyndelsesbogstav i feltnavne.

GP 6, 13/ Konstruktorer En konstruktor skal have samme navn som den klasse den er defineret i. En konstruktor har en parameterliste ligesom en metode. En konstruktor har ingen returtype, ulige metoder. En konstruktors krop en en blok {... }, som indeholder erklæringer og ordrer. Konstruktorer bruges til at give klassens felter passende værdier, f.eks. Konto(String ejer) { this.ejer = ejer; saldo = 0; overtræk = -3000; }

GP 6, 13/ Metode-erklæringer En metode-erklæring består af: –evt. modifieres (public|private|protected)? static?, –returtype, –metodenavn, –parameterliste, –metodekrop. Hvis returtypen er ”void” skal metoden ikke returnere en værdi. Ellers skal den returnere en værdi af den rigtige type med ordren return udtryk En metodesignatur består af: –metodenavn og –liste af parametertyper. Eksempler på returtyper og metodesignaturer: doubleaflæsSaldo() voidhæv(double) doublesqrt(double)

GP 6, 13/ Ordrer En ordre har en effekt (på lageret eller skærmen), men ingen værdi. Ordre-artEksempel if-ordreif (x != 0) y = 1/y; if-else-ordreif (x !=0) y = 1/y; else y=0; metodekald (void)System.out.println(“Hello”); blok{ x = 1; y = 1/y; } for-løkkefor (int i = 0; i < 100; i++) { sum += i; } while-løkkewhile (sum < 100) sum++; do-while-løkkedo { sum++; } while (sum < 100); retur-ordrereturn x*x; switch-ordreswitch (x) { case 0: y = 0; break; default: y = 1/x; }

GP 6, 13/ Udtryk Et udtryk har en type, en værdi og måske en effekt (på lageret, skærmen eller input/output (sideeffekt)). Udtryks-artEksempel konstant7 variabelx aritmetisk udtrykx + 1 tildelingx = x+1 sammenligningx == 7 logisk udtrykx == 7 && y < 10 metodekald (nonvoid)Math.sqrt(5) konstruktorkaldnew Konto(“Kasper”) betinget udtrykx != 0 ? 1/x : 1

GP 6, 13/ Fra udtryk til ordre Et udtryk efterfulgt af “;” giver en ordre En tildelingsordre x = ; består af: –udtrykket x = , der har værdien 127 og har den effekt at sætte x til 127; –et semikolon “;”. Semikolon forvandler udtrykket “x = ” til en ordre “x = ;” ved at smide udtrykkets værdi væk. Hvad er værdien af x efter udførslen af int x = 8; x == 9;

GP 6, 13/ Modifiers Felt:staticikke static Antal kopierEn for klassenEn for hvert objekt Fælles for klassejanej Metode:staticikke static Kan bruge ”this”nejja Invokeres påklassenavnobjektreference Felt:finalikke final Kan opdateresnejja

GP 6, 13/ Modifiers... Felt eller metode:publicprivatehverken public eller private Synlig i samme klasse ja Synlig i andre klasser i samme pakke janejja Synlig i andre klasser uden for pakken janej

GP 6, 13/ Spørgsmål Spørgsmål? Kommentarer?