Objektorienteret programmering!



Relaterede dokumenter
Objektorienteret programmering. Introduktion

1. Flyreservationssystem. OOP e uge 37 - første kursusgang. OO-paradigmet jf. XP s. 10f

Ugeseddel 4 1. marts - 8. marts

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

DM502. Peter Schneider-Kamp

Hassansalem.dk/delpin User: admin Pass: admin BACKEND

Objects First with Java A Practical Introduction Using BlueJ

Klasser og nedarvning

Tree klassen fra sidste forelæsning

4 Basal Objekt-orienteret Programmering I.

Skriftlig eksamen i Datalogi

Test af It-komponent

UML til kravspecificering

import java.applet.applet; import java.awt.*; public class MinApplet extends Applet { // diverse metoder her - til grafik er det nok med "paint":

Objektorienteret design med arv og polymorfi:

Objektorienteret Programmering

Datalogi OB, Efterår 2002 OH er, forelæsning 3/ forstå datastrukturer og algoritmer (teoretisk forståelse og intuition)

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

Lektion 3. Grundlæggende programmering i VR

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004

Hvad er et distribueret objekt? Plan Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Objektorientering. Programkvalitet

DANMARKS TEKNISKE UNIVERSITET

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Oversigt. Modellering.6. Begrebsmodellering. Begrebsapparat til OO. Fænomener og begreber. Objektorienteret modellering

29 Opsamling af Objekt-orienteret Programmering.

Hvordan organiseres et programs grafik-elementer? OOP e uge kursusgang. Advarsel! Component-objekter

Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Abstrakte klasser.

Videregående Programmering for Diplom-E Noter

Software Construction 1 semester (SWC) Spørgsmål 1

Hvem er vi? Kursus Introduktion. Kursuslærerne. Agenda for i dag

Greenfoot En kort introduktion til Programmering og Objekt-Orientering

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

Løsning af skyline-problemet

Videregående programmering i Java

Videregående programmering i Java

Skriftlig eksamen i Datalogi

Miniprojekt2011. Formålet er at lære og indlære god objektorienteret programudvikling og programmering med Java, samt undervejs at opfylde studiekrav.

Side 1. Databaser og SQL. Dagens gang. Databasebegreber. Introduktion til SQL Kap 1-5

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

Real-time programming safety in Java and Ada

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

Eksempel: Skat i år 2000

Software Dokumentation

Bits DM534. Rolf Fagerberg, 2012

Objektorienteret Analyse & Design

Videregående programmering i Java

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

Abstrakte datatyper C#-version

Singleton pattern i Java

Noter til dm529. Jonas Nyrup. 11. november 2011

Skriftlig eksamen i Datalogi

Generel projektbeskrivelse

Programmering. Udvidet Programmering. Kurserne. Kurset: programmering i sproget Java. Lærerne: Morten Larsen og Peter Sestoft

Hvad er Objekter - Programmering

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16,

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

UML-Light (Note: UML-Light T133, ver. 2004) Finn Overgaard Hansen, IHA

SWC Elementer i klassedefinition

Studieordning del

SWC eksamens-spørgsmål. Oversigt

13 Objekt-orienteret Design.

Forelæsning Uge 2 Torsdag

Assignment #5 Toolbox Contract

2 Abstrakte datatyper.

Java Klasse nedarvninger

2. Metode. 2.1 Interessentanalyse Interessenterne i projektet er vist i nedenstående figur: Aftalekalenderprojektet. Indledning

Forelæsning Uge 2 Torsdag

Introduktion til OO* og UML

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

Kursus 02199: Programmering. Lidt om forelæseren. Velkommen til. Praktisk information: kursusaktiviteter. Praktisk information: forelæsninger

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.

Overblik. Class Loader. Java. Class Libraries. Bytecode. Verifier Java. Source (.java) Just in Time Compiler. Java

SOFTWARE DOKUMENTATION

Aalborg University SYNOPSIS: TITEL: TOOL - et objektorienteret sprog for nybegyndere. EMNE: Værktøjer, sprog og oversættere

Løsningsforslag til Camp Let. Case Beskrivelse: Camp Let

Forelæsning Uge 2 Torsdag

Grundlæggende Programmering ITU, Efterår Skriftlig eksamen i Grundlæggende Programmering

Programmering i C. Kursusintroduktion. Lektion september Målgruppe 2 Indhold 3 Form 4 Materiale. Målgruppe Indhold Form Materiale

Grundlæggende OOA - OOD

Forelæsning Uge 1 Torsdag

Algoritmedesign med internetanvendelser ved Keld Helsgaun

Databasesystemer, forår 2006 IT Universitetet i København. Forelæsning 3: E-R modellering. 16. februar Forelæser: Rasmus Pagh

Klasser og objekter. (Afsnit i manualen)

Forelæsning Uge 6 Mandag

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Service Orienteret Arkitektur. - en teknisk betragtning. Ordrupvej Gentofte. tel fax

Software 1 with Java. Recitation No. 7 (Servlets, Inheritance)

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

A Profile for Safety Critical Java

26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler.

Umbrello UML Modeller-håndbogen

Forelæsning Uge 2 Mandag

Syntaks og syntaksgenkendelse, særligt regulære udtryk og tilstandsmaskiner og lidt om anvendelser i bioinformatik

Årsagen til fejl. Erkendelse af fejl. Håndtering af fejl.

Transkript:

Objektorienteret programmering! Introduktion! Plan!! Generelt om programmeludvikling!! Objekter og klasser (begreber)!! Objektorienteret programmeludvikling!! Programmering i Java! 1! 2! Aforisme! Programmeludvikling! Ordene er håndtag på tingene.! Hvis vi ikke passer på,! holder de os virkeligheden fra livet.! Megen udvikling baseres på trial-and-error.! Problemerne træder tydeligst frem ved udvikling af store systemer.! Piet Hein! Der er behov for kodificering af viden om, hvad man skal gøre, og hvad man ikke skal gøre (designviden).! 3! 4!

Ønskværdige egenskaber ved programmel!! Brugbart!! Rettidigt!! Korrekt!! Robust!! Brugervenligt!! Effektivt!! Let at vedligeholde!! Genbrugeligt! Normalt kan alle egenskaber ikke opfyldes samtidigt.! 5! Objektorienteret programmering! Fokus på!! Vedligeholdelse!! Genbrug! Vedligeholdelse forenkles ved!! Enkelhed!! Fleksibilitet!! Læsbarhed! 6! To muligheder for fokusering! Om sprogs betydning (1)!!Algoritmer!!!!!Fokusering på control flow!!!(procedure-orienteret tilgang)! (2)!!Datastrukturer!!!!!Fokusering på data flow! The limits of my language! mean the limits of my world.! Objektorienteret programmering er en balance imellem disse to yderpunkter.!! Ludwig Wittgenstein! 7! 8!

Objektorienterede sprog! Simula!!1967!! Smalltalk!!1970! Objective C!!1982! C++!!!1983!(Bjarne Stoustrup, Danmark)! Eiffel!!!1985! Object Pascal!!1986!! Beta!!!1990!! Java!!!1995! C#!!!!2000!(Anders Hejlsberg, Danmark)!!!!!og mange flere! 9! Citat! Alan J. Perlis! You think you know when you learn,! are more sure when you can write,! even more when you can teach,! but certain when you can program.!!!!!!!!!!!! -Alan J. Perlis! 10! Programmeludvikling! Programsystem! Grundlæggende begreber i objektorienteret programmering! Verden! Abstraktion! Model! Algoritmer! Fortolkning! Abstrahere: at se bort fra noget! Objekt:! Fortolkning i den virkelige verden:!!!et objekt kan repræsentere alt, hvad der tydeligt!kan identificeres.! Repræsentation i model:!!!!!et objekt har en identitet, en tilstand og en adfærd.! Målet for programmeludvikling er konstruktion af programsystemer, der hjælper mennesker med problemløsning i den virkelige verden.! 11! 12!

Tilstand og adfærd! Klasser! Tilstanden for et objekt defineres ved felter med tilhørende værdier.! Adfærden for et objekt defineres ved metoder, der kan aflæse eller ændre objektets tilstand.! Klasse:! Fortolkning i den virkelige verden:!!!et klasse repræsenterer en mængde af objekter!med fælles karakteristika. Objekterne kaldes for!instanser af klassen.! Repræsentation i model:!!!!!en klasse beskriver den struktur af tilstande og!adfærd, der er fælles for alle klassens instanser.! 13! 14! Eksempel på en klasse! Syntaks for felter og metoder!!class Point {! // Klassenavn!!!!! int x, y;! // Felter!! void move(int dx, int dy) { // Metode!! x += dx;!!!!!! y += dy;!!!!!!! }!!!!!!!! En klasse er en skabelon til brug for skabelse af objekter.! Felt:!![Visibility] Type Identifier [= InitialValue]! Metode:!!!!!!![Visibility] Type Identifier([ParameterList])! Visibility ::= public private protected! 15! 16!

Klasse:! Grafisk notation" UML (Unified Modelling Language)! Klassenavn! felt 1...! felt n! metode 1..! metode m! De to nederste dele kan udelades.! class Point! private int x private int y! Point! Eksempel! public void move(int dx, int dy)! -x:int -y:int! Point! +move(dx:int, dy:int)! UML-syntaks! Forkortede former! Point! x! y! move()! Point! 17! 18! UML-notation for objekter! Eksempel! Objektnavn : Klassenavn! felt 1 = værdi 1!..! felt n = værdi n! Bemærk understregningen! Et Point-objekt! p1 : Point! x = 79 y = 13! Point p1 = new Point();! p1.x = 79;!! p1.y = 13;!! Den nederste del kan udelades.! Objektnavnet eller klassenavnet kan udelades.! Et metode kan kalde et objekts metoder.! Eksempel på kald:! p1.move(3, 4)! 19! 20!

3 nyttige principper ved programmeludvikling! 1. Modularisering! 2. Abstraktion! 3. Indkapsling! 1. Modularisering! Modularitet er nøglen til god programmering.! Opdel programmet i små moduler, som interagerer med hinanden igennem snævre, veldefinerede grænseflader.! Fordele:!!!En programdel kan forstås, uden at hele!!programmet forstås.!!!en fejl i en programdel kan rettes, uden at!resten af koden bliver inddraget.! 21! 22! Princip:! Modularisering! Et komplekst system dekomponeres til en mængde af samhørende, men løst koblede komponenter, kaldet moduler! Modulerne er typisk organiseret i et hierarki (d.v.s. et modul kan indeholde andre moduler).! Ved objektorienteret programmeludvikling udgøres modulerne af klasser og pakker (samhørende klasser).! 2. Abstraktion! At abstrahere: at se bort fra noget.! Abstraktion hjælper til med at bestemme en hensigtsmæssig samling af komponenter.!!!!!!! Vi kan betragte forskellige ting som ens, selv om de er forskellige.! 23! 24!

Abstraktion! Kontrakter! Princip:! Modulets adfærd karakteriseres ved hjælp af en kortfattet og præcis beskrivelse! Beskrivelsen kaldes modulets kontraktlige grænseflade.! Et modul yder tjenester til (servicerer) sine brugere (klienter). Et modul skal overholde sine kontraktlige forpligtigelser.! En kontrakt beskriver hvad, men ikke hvordan. Klienter behøver kun at kende kontrakten for at bruge modulet.! 25! 26! Udformning af kontrakter for klasser! En kontrakt specificerer for hver af klassens offentlige metoder metodens prebetingelse og metodens postbetingelse.! Prebetingelsen fastlægger forudsætningerne for at kalde metoden.! Postbetingelsen fastlægger virkningen af et kald.! En betingelse, som gælder såvel før som efter kald af enhver af klassens offentlige metoder, kaldes for en klasseinvariant.! Eksempel på specifikation! /**! * @invariant 0 <= size() <= capacity! */! public class Stack {! /** Place an object at the top of the stack! * @pre!isfull()! * @post size() = size()@pre + 1! */! public void push(object obj) {... /** Remove and return the top object of the stack! * @pre!isempty()! * @post size() = size()@pre - 1! */! public Object pop() {... }! 27! 28!

Nytten af kontrakter!! Design: Et godt værktøj til programspecifikation!! Implementering: Angiver retningslinjer for programmering!! Dokumentation: Udgør en væsentlig del af dokumentationen!! Afprøvning: Angiver retningslinjer for ekstern afprøvning! Princip:! 3. Indkapsling! Implementationen af et modul bør adskilles fra dets kontraktlige grænseflade og være skjult for modulets klienter!! Jo mindre klienten ved om implementationen, desto løsere bliver koblingen imellem modulets og dets klienter.! Implementationen kan skiftes ud, uden at klienterne bliver berørt (så længe grænsefladen ikke ændres).! 29! 30! Grænseflader! Eksempel! En grænseflade uden implementation kaldes en abstrakt datatype (i Java-terminologi: et interface).! Grafisk notation:! interface Movable {!!!void move(int dx, int dy);! }!!! ServiceInterface! aservice()! ServiceImplementation! aservice()! Bemærk at grænsefladenavnet er skrevet i kursiv, og at linjen på pilen er stiplet! class Point implements Movable {! int x, y;! void move(int dx, dy) {! x += dx;!!! y += dy;!! }!!! }!!! 31! 32!

Indkapsling! En klasse indeholder en række egenskaber.! Nogle egenskaber er skjulte (indkapslede). De øvrige udgør klassens grænseflade.! Polymorfi! En kontraktlig grænseflade kan overholdes af mange mulige implementeringer.! Skjult information! Point! int x;! int y;! Grænsefladen! Muligheden for dynamisk at udskifte moduler, uden at klienterne berøres, kaldes for polymorfi (fra græsk: mange former).! move! 33! 34! Eksempel på polymorfi! class Line implements Movable {! Point p1, p2;!!!!!!!! void move(int dx, dy) {! p1.move(dx, dy);! p2.move(dx, dy);! }!!!! }!! Movable m;!...!! m.move(3, 4);! m er polymorf! Virker, hvad enten m aktuelt er et Pointobjekt eller et Line-objekt.! Relationer imellem klasser!! Nedarvning!!!! Associering!!!!!!!Aggregering!!!!!!!Komposition! 35! 36!

Nedarvning! Notation for nedarvning! En klasse C2 siges at nedarve fra en anden klasse C1, hvis enhver instans af C2 også er en instans af C1.!! C2! C1! C1! C2! class C2 extends C1 {!...! C2 siges at være underklasse af C1.!!! C1 siges at være overklasse for C2.! C2 er en udvidelse af C1: alt hvad der gælder for C1, gælder også for C2.! 37! 38! Shape! Eksempel! class Shape { class Circle extends Shape {! Point center;!! double radius;!!! Tolkning af nedarvning! En underklasse udgør en specialisering af sin overklasse.! En overklasse er en generalisering af sine underklasser.! Circle! Polygon! class Polygon extends Shape {! Point[] points;! Nedarvning repræsenterer en er-relation (engelsk: is-a relation).! En underklasse udgør en udvidelse af sin overklasse.! En overklasses felter og metoder deles af dens underklasser! (metoderne genbruges af underklasserne).!! 39! 40!

Multipel nedarvning! Relation imellem grænseflade og implementering! En klasse kan i princippet nedarve direkte fra mange overklasser. Dette kaldes for multipel nedarvning.! grænseflade! grænseflade1! grænseflade2! Java understøtter ikke nedarvning i sin fulde generalitet.!!!!!!!! I Java kan en klasse højst nedarve direkte fra én anden klasse.! En begrænset form for multipel nedarvning er dog mulig, idet en klasse gerne må implementere mere end ét interface.! implementation1! implementation2! Multiple implementeringer! implementation! Multiple grænseflader! 41! 42! Princip:! Abstraktionsniveauer! Abstraktioner kan organiseres i niveauer (lag)! Jo højere niveau, desto mere generel er abstraktionen Jo lavere niveau, desto mere specifik er abstraktionen! Associering! En associering repræsenterer en relation imellem to klasser.! Angives i UML med en kant:!!!!!!!!!!!!class A!!!class B! 43! 44!

Associeringer kan navngives, og deres retning kan angives.! Aggregering! advisee! Student! *! enroll! *! *! 1! advisor! Course! *! teach! 1! Teacher! Aggregering er en speciel form for associering og betegner en har-relation (engelsk: has-a relation).!!! Grafisk notation:! Aggregat! Component! En kants ender kan forsynes med heltalsintervaller:!!l...u!!!l, l+1,..., u!!i!!!i!!!*!!!0, 1, 2,...! Der kan knyttes intervalangivelser på en kants endepunkter.! Eksempel:! Polygon! *! *! Point! 45! 46! Komposition! Komposition er en stærkere form for aggregering, der benyttes, når der er tale om eksklusivt ejerskab.! Grafisk notation:!! Aggregat! Der kan knyttes intervalangivelser på en kants endepunkter.! Eksempel:! Car! 1! 4! Component! Wheel! UML-diagram " for en E-boghandel! 1! *! 2! EBookstore! Customer! Address! 1! *! Item! Book! MusicCD! Software! 1! 1! *! *! Order! OrderItem! *! 1! 47! 48!

Java-klasser for online-boghandelen! class Item {!! String title;!!string publisher;!!int yearpublished;!!int ISBN;!!double price;!! class Book extends Item {! String author;!! int edition;!! int volume;!! class Software extends Item {!!int version;!!! class OrderItem {!!Item item;!!int quantity;! }! class Order {!!! Customer customer;! Collection<OrderItem> orderitems;! double salestax;!! double shippingfee;!! double total;! int methodofpayment;! class MusicCD extends Item {!String artist;!!!int volume;!!! fortsættes! 49! fortsættes! 50! class Customer {!!!String name;!!int ID;!!!String password;!!!address shippingadrees;!!address billingadress;!! class Address {!!String street;!!string city;!string state;!!string country;!!string postalcode;! class EBookstore {!!!!Collection<Customer> customers;!!collection<orderitem> orders;!!collection<item> items;! 51! Vandfaldsmodellen:! faseopdelt! Traditionel systemudvikling! Kravanalyse! Design! Implementering! og afprøvning! Brugertest! Vedligeholdelse! 52!

Objektorienteret systemudvikling (Booch)! Mikroprocessen! Udviklingsprocessen er iterativ.!!! Den består af successive iterationer, der som mål har, at!!!identificere klasserne!! Identificer! klasser!!!identificere klassernes semantik (deres felter og!metoder)!!!identificere klassernes indbyrdes relationer! Definer grænseflader og implementer! Identificer! klassernes semantik!!!definere grænseflader!!!implementere klasserne! Systemet vokser i relativt små afgrænsede skridt.! Identificer! klassernes relationer! Spiralmodel! 53! 54! Makroproces! Førnævnte tilgang kaldes for mikroproces.!! For at styre mikroprocessen benyttes følgende faser:!!!begrebsliggørelse (foranalyse)!!!!forståelse af projektet, fastsættelse af rammer! Foranalyse! Makroprocessen! Analyse!!!Analyse!!!!!!!!Udvikling af en model af systemets ønskede opførsel!!!design!!!!!!!!skabelse af en arkitektur!!!!!!(objekter/klasser og deres relationer)!! Vedligeholdelse! Design!!!Implementering!!!!!!Kodning i et objektorienteret programmeringssprog!! Vedligeholdelse!!!!!!Fejlretning og videreudvikling!!! 55! Implementering! Videreudviklet i Rational Unified Process! 1.! Påbegyndelse! 2.! Udarbejdelse! 3.! Konstruktion! 4.! Overdragelse! 56!

Retningslinjer for udviklingsprocessen! (1)! Begrebsliggørelse!!!!!!Nedskriv de basale krav til programmellets funktionalitet.! (2)! Modellering af krav!!!!!foretag scenarie-analyse:!!!!!!!opskriv mulige brugerhandlinger og angiv systemets!!!ønskede reaktioner. Start med scenarier, der!!!!!omfatter handlinger, der ikke er fejlbehæftede.! (4)!!Identifikation af klassernes semantik! Identificer klassernes felter og metoder. Find fællestræk for klasserne og lav overklasser, der indeholde disse fællestræk.! (5) Identifikation af klassernes indbyrdes relationer! (3)!Identifikation af klasser!!!!!foretag navne-udsagnsord-analyse:!!!!!!understreg alle navneord og udsagnsord i!!!!!kravspecifikationen. Navneordene er kandidater for!!!!klasser. Udsagnsordene er kandidater for metoder.!! 57! Klassediagram! Brugstilfældediagram! Tilstandsdiagram! Sekvensdiagram! 58! Extreme programming (XP)" www.xprogramming.com! Om udviklingsmetoder!! Udviklingen foretages i iterationer!!!!resultatet af hver iteration er et kørende program,!!der enten er en udvidelse eller en omstrukturering af!!programmet fra forrige iteration!! Skriv tests først! Fremtvinger en klar definition af grænsefladen! Der er ingen kogebogsmetoder, der kan erstatte intelligens, erfaring og god smag ved design og programmering.! Fanger fejl tidligt i forløbet!! Programmér i par! Den ene koder, mens den anden tænker! Det er OK med diagrammering. Men brug ikke for megen tid på det, og vær villig til at kassere diagrammerne.! 59! 60!

Nogle designråd! Javas egenskaber! 1.! Gør hverken designet for specifikt eller for generelt! 2.! Undgå unaturlige klasser! 3.! Respekter de naturlige abstraktionsniveauer! 4.! En klasse bør ikke have for mange forpligtelser (1-3)! 5.! En klasse bør ikke have urelaterede forpligtelser!! Objektorienteret!! Distribueret!! Sikkert!! Platformsuafhængigt! 61! 62! Udførelse af Java-programmer! Et kompromis imellem oversættelse og fortolkning! Kildekode! Oversætter! Bytekode!.java!.class! platformsuafhængigt! Bytekode! Opcode (1 byte)! operand 1! operand 2!...! James Gosling! Bytekodefortolker! CPU 1! JVM! Bytekodeoversætter! Maskinkode! CPU 2! Java-chip! Java-maskine! platformsafhængigt! JVM s instruktionscyklus:! do {!!!!!!!!!hent opcode-byten for den aktuelle instruktion;!hent operanderne;!!!!udfør instruktionen;!! " } while (!done);! JVM! JIT/HOTSPOT! 63! 64!

Applikationer og appletter! Applikation: et normalt program med adgang til alle systemressourcer.! Applet: et program indlejret i en Web-side med begrænset adgang til systemressourcer.!! Lagerbeskyttelse!! Kodeverifikation!! Ressourcebeskyttelse! Sikkerhed! En applet kan normalt ikke!!!læse og skrive filer på værtsmaskinen!!!kommunikere med andre maskiner end den,!!hvorfra appletten er hentet!!!starte andre programmer! 65! 66! En simpel applikation! public class Hello {!!!!! public static void main(string[] args) {! System.out.println("Hello from Venus");!!!!!!!!! }!! 67! 68!

En simpel applet! (0,0)! Det grafiske koordinatsystem! x! import java.awt.*;! import java.applet.applet;! public class HelloFromVenus extends Applet {! public void paint(graphics g) {! Dimension d = getsize();! g.setcolor(color.black);! g.fillrect(0, 0, d.width, d.height);! g.setfont(new Font("Helvetica", Font.BOLD, 24));! g.setcolor(new Color(255, 215, 0)); // gold color! g.drawstring("hello From Venus!", 40, 25);! g.drawimage(getimage(getcodebase(), "Venus.gif"),! 20, 60, this);! y! width! height! 69! 70! Konkret eksempel! HTML-kode! (0,0)! (0,350)!! Hello!(40,25)! From Venus!" (20,60)! (300,0)! (300,350)! <html>! <head>! <title>! HelloFromVenus applet! </title>! </head>! <body bgcolor=black text=white>! <center>! <applet code="hellofromvenus.class"! width=300 height=350>! </applet>! </center>! <hr>! <a href="hellofromvenus.java">the source.</a>! </body>! </html>! 71! 72!

Brug af Java-arkiv! Hvis et program består af flere filer - klassefiler, såvel som billede- og lydfiler - kan disse med fordel komprimeres og samles i et Java-arkiv.! jar cf Hello.jar HelloFromVenus.class Venus.gif! Ugeseddel 1" 31. august - 7. september! Læs kapitel 4 i lærebogen (side 75-157)!! Løs opgaverne 3.1 og 3.2! Specificering af anvendelse i HTML:! <applet code="hellofromvenus.class"! archive="hello.jar"! width=300 height=350>! </applet>! 73! 74!