GP 6, 3/10 20011 Grundlæggende programmering Efterår 2001 Forelæsning 6 onsdag 3/10 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
Programmeringsteknologi: Lektion 1
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.
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.
Forelæsning 3.1 Collections Javas for-each løkke
Intro til C# apps Kodegennemgang af simpel C# app
To måder at overføre objekt- referencer mellem processer (1) Via naming service - interface RMISolver (2) Som parametre til fjernprocedurekald - interface.
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.
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.
FEN KbP/seminar2: design11 Kontraktbaseret programmering Seminar 2 Klassedesign – grundprincipper Eksempler: Stack Dictionary.
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.
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.
Paradigmer i Programmering 1. Program for idag : Funktioner og udtryk i SML : Øvelse : Frokost – 14.00: Deklarative.
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.
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.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Hvad består en distribueret applikation af ? Processer der kører på hver deres maskine Tråde - 1 eller flere "letvægtsprocesser" per proces Objekter i.
PD – kursusgang 3 Introduktion til Java Script. Mål Viden om hvordan JavaScripts indlejres i HTML dokumenter Viden om programmering i JavaScript  Erklæring.
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.
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.
Variabler, klassevariabler, identitet og lighed, collections
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
Polymorfi Abstrakte klasser, substitutionsprincippet, statisk og dynamisk type.
Kari Rye Schougaard, Ph.d.-stud. Værktøjer og Teknikker, 2006 A A R H U S U N I V E R S I T E T DATALOGISK INSTITUT Java på 20 minutter (eller lidt mere)
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation.
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.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
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;
Klasser og objekter (Afsnit i manualen).
Forelæsning Uge 4 – Torsdag
Præsentationens transcript:

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

GP 6, 3/ Dagens program Det praktiske Lagermodel for klasser og objekter Indkapsling Overlæsning (overstyring) Overblik over Javas sprogbestanddele (review) Gennemgang af programeksempler (ikke inkluderet her)

GP 6, 3/ Det praktiske LinuxLab arrangement: torsdag, 4. okt., kl. 15:15-17, LinuxLab (lok. 4.05), introduktion til LaTeX, verdens mestbrugte tekstbehandlingssystem for videnskabelige artikler og teknisk dokumentation; se Opdateret forelæsningsplan: I dag: pakker, klasser og objekter i Java. Næste gang: tabeller. Næste gang igen: klassegrænseflader (interfaces) og nedarvning. Se hjemmesiden.

GP 6, 3/ 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, 3/ 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 main(String[] args){ 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: main, li. 5 main args: kasper: dilbert: returTil: prompt call stack heap

GP 6, 3/ Brug af klasse biblioteker Vektor klassen er beskrevet i kapitel 6.5, i appendiks M, og på Java’s hjemmeside.

GP 6, 3/ 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. 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, 3/ Rocker udgaven instans variable 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 en tilstand, laves en public tilgangsmetode. F.eks. aflæsSaldo hvis man udefra har brug for at tildele en instansvariabel en ny værdi laves en public ”sæt” metode

GP 6, 3/ 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. 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, 3/ Begreb: klient og server objekter Server objekter stiller en række metoder til rådighed som andre objekter (kaldet klient objekter) kan benytte sig af. Klient objekter har instansvariable der refererer til andre objekter (server objekter). I klientens metoder kalder server objektets metoder. Klient objekt Server serverObjekt;... void klientMetode(){... serverObjekt.service();... } Server objekt void service(){... serverObjekt.service();... } Et klient objekt starter enten ved at det bliver lavet og startet fra main, eller ved at det er server for en anden klient. Appletten er et server program, og browseren er klienten. Bemærk at man ikke selv skriver klienten.

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

GP 6, 3/ 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, 3/ 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 (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, 3/ Programmer og Java-filer Et program består af en samling klassedefinitioner. Programmets klassedefinitioner kan ligge i en eller flere.java-filer. Mindst en af klasserne skal indeholde en metode-erklæring af formen public static void main(String[] args) {... } hvis programmet skal kunne udføres fra kommandofortolkeren. 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, 3/ Klassedefinitioner En klassedefinition består af: –felt-erklæringer, –konstruktor-erklæringer og –metode-erklæringer. Rækkefølgen er ligegyldig. Klassenavne kan vælges frit. Man bruger normalt stort begyndelsesbogstav i klassenavne.

GP 6, 3/ Felter 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. Man bruger normalt lille begyndelsesbogstav i feltnavne.

GP 6, 3/ 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, 3/ Metode-erklæringer En metode-erklæring består af: –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, 3/ 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, 3/ Udtryk Et udtryk har en type, en værdi og måske en effekt (på lageret eller skærmen). Udtryks-artEksempelType (int x)Type (double x) 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, 3/ 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, 3/ Modifiers Felt:staticikke static Antal kopierEn for hver klasseEn for hvert objekt Fælles for klassejanej Metode:staticikke static Kan bruge ”this”nejja Invokeres påklassenavnobjektreference Felt:finalikke final Kan opdateresnejja

GP 6, 3/ 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, 3/ 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; } 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; }