Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

GP8, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 8 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.

Lignende præsentationer


Præsentationer af emnet: "GP8, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 8 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder."— Præsentationens transcript:

1 GP8, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 8 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder 9.15. www.itu.dk/courses/GP/E2005 Martin Lillholm

2 GP8, Martin Lillholm 2 Obligatorisk opgave Var opgaven til i onsdags 1.For nem 2.For svær 3.Tilpas – skulle bruge noget tid og tanker på den, men så var den også til at løse/forstå. Er der nogen, der ikke har afleveret fordi den slet ikke var til at få hul på?

3 GP8, Martin Lillholm 3 ”Terminsprøve” Fredag den. 18 november fra 13-16 Afløser den obligatoriske opgave: –Til stede og afleverer – rettes som eksamenssæt –Ikke til stede – afleverer almindeligt – rettes almindeligt Forsøger at gøre det så realistisk så muligt…

4 GP8, Martin Lillholm 4 Evaluering Hvorfor overhovedet evaluere ? Hvor mange har overhovedet evalueret ? Husk det nu !!

5 GP8, Martin Lillholm 5 Projekter Hvorfor projekter i GP ? Projektforslag næste gang Projektdag den 9. november

6 GP8, Martin Lillholm 6 Sidste gang Nedarvning Skrivning til tekstfil

7 GP8, Martin Lillholm 7 Denne gang Wrapper klasser Interfaces Typer i Java Polymorfi Søgning og sortering

8 GP8, Martin Lillholm 8 Wrapper-klasser Til alle primitive typer ( byte, short, int, long, float, double, char, boolean, void ) findes såkaldte wrapper klasser Giver mulighed for at repræsentere primitive typer som objekter: Integer countObj = new Integer (10); Hvorfor wrapper-klasser? –Ophæv skellet mellem primitive typer og objektyper –Polymorfi –Hjælpemetoder (L&L appendiks M) Primitiv typeWrapper klasse byteByte Short IntInteger longLong floatFloat doubleDouble charCharacter booleanBoolean voidVoid

9 GP8, Martin Lillholm 9 Autoboxing og unboxing Automatisk konvertering mellem primitive typer og den tilsvarende wrapper-klasse: Integer count; int number = 42; count = number; // Autoboxing Integer i = new Integer (32); int j; j = i; // Unboxing

10 GP8, Martin Lillholm 10 Grænseflader (interfaces) Eksplicitte og implicitte interfaces Et (eksplicit) interface er en samling af abstrakte metoder (og konstanter) (og er en type... se senere) For konstanterne er public static final underforstået og derfor ikke nødvendige. Konstanterne er tilgængelige i instanser, der implementerer interfacet For metoderne er public abstract underforstået og derfor ikke nødvendige En klasse der implementerer et interface skal implementere metoderne i interfacet – hvorfor ? Men kan sagtens implementere flere/andre offentlige metoder. En klasse kan implementere flere interfaces Interface hierakier er mulige Nøgleord: interface og implements ( Svarer groft sagt til class og extends) Hvorfor interfaces ?

11 GP8, Martin Lillholm 11 Interfaces – eksempler public interface Complexity { public void setComplexity (int Complexity); public void getComplexity (); } –Question.java L&L side 311 i BlueJ Comparable Metoden: int CompareTo (Object obj); –Contact.java L&L side 503 I BlueJ

12 GP8, Martin Lillholm 12 Nedarvning Hvad har de tre typer personer til fælles: –De er alle personer med navn og højde –Både VIP’ere og TAP’ere er ansat i en afdeling StuderendePersonTAPAnsatVIP

13 GP8, Martin Lillholm 13 Typer i Java Primitive typer: – ( byte, short, int, long, float, double, char, boolean, void ) –12, -34, 57, 43234, 2.31f, … Referencetyper: –Klassetype – givet i kraft af en klasseerklæring –(Interface-type – givet i kraft af en interface erklæring) –Tabeltype (array type), t[] hvor t er en type –null eller en reference til et objekt

14 GP8, Martin Lillholm 14 Subtyper En type t1 kan være en subtype af en type t2. I givet fald er t2 en supertype af t1 Generelt: –Enhver type er en subtype af sig selv –Hvis t1 er en subtype af t2 og t2 er en subtype af t3 så er t1 en subtype af t3 For primitive typer: –char er en subtype af int, long, float og double –byte er en subtype short, int, long, float og double –short er en subtype af int, long, float og double –int er en subtype af long, float og double –long er en subtype af float og double –float er en subtype af double (widening)

15 GP8, Martin Lillholm 15 Subtyper For referencetyper: –Hvis t1 og t2 er klasser så er t1 en subtype af t2 hvis t1 er en subklasse af t2 –Hvis t1 og t2 er interfaces så er t1 en subtype af t2 hvis t1 er et subinterface af t2 –Hvis t1 er en klasse og t2 er et interface så er t1 en subtype af t2 hvis t1 implementerer t2 eller implementerer et subinterface af t2 –En tabeltype t1[] er en subtype af tabeltype t2[] hvis referencetype t1 er en subtype af referencetype t2 –Alle referencetyper inklusive enhver tabeltype er en subtype af Object Ingen primitive typer er subtyper af en referencetype. Ingen referencetyper er subtyper af primitive typer (Sestoft 2002)

16 GP8, Martin Lillholm 16 Hvorfor alt det her? Lad t1 være en subtype af t2 Enhver værdi v1 af type t1 kan benyttes, hvor en værdi af type t2 forventes Vi siger at typerne t1 og t2 er kompatible

17 GP8, Martin Lillholm 17 Polymorfi Mirriam-Webster Online: Main Entry: poly·mor·phism Function: noun : the quality or state of being able to assume different forms: as a : existence of a species in several forms independent of the variations of sex b : the property of crystallizing in two or more forms with distinct structure - poly·mor·phic adjective - poly·mor·phi·cal·ly adverb “Almindelig” reference “Polymorf” reference – subtyper – kompatibilitet Sen binding (late binding)

18 GP8, Martin Lillholm 18 Polymorfi gennem arv eksempler Person person; Studerende studerende; Ansat ansat; Vip vip; person = ansat // OK – hvorfor ? person = studerende; ansat = vip; vip = ansat; // ikke ok – hvorfor ? Hvad med metodekald ? Sen binding. Firm.java i L&L side 486 i BlueJ StuderendePersonTAPAnsatVIP

19 GP8, Martin Lillholm 19 Polymorfi gennem interfaces public interface Speaker { public void speak(); public void annonce(); } Speaker current; current = new Philosopher(); // Antag at en Philosopher implementerer // Speaker samt metoden talk() Speaker guest; guest = new Philosopher(); guest.speak(); guest = new Dog();// Tilsvarende for Dog guest.speak(); Speaker special = new Philosopher(); special.talk(); // FORKERT – hvorfor ? ((Philosopher)special).talk() // OK – hvorfor ? public void sayIt (Speaker current) { // Hvad kan vi kalde med ? current.speak(); }

20 GP8, Martin Lillholm 20 Det store motiverende eksempel Cirkler og Rektangler som eksempler på former –InheritanceDriver.java –InheritancePanel.java –( InheritancePanel1.java ) –Shape.java –Circle.java –Rectangle.java –Findes alle på hjemmesiden

21 GP8, Martin Lillholm 21 Søgning Søgning handler om at finde et givent element i en samling af data Vi skelner mellem søgning i: –En samling usorterede data –En samling af sorterede data I vores eksempler vil en samling af data være en tabel –Andre muligheder ?

22 GP8, Martin Lillholm 22 Lineær søgning – usorterede data Data gennemsøges fra enden til anden Tavleeksempel Hvor meget arbejde kræver lineær søgning? –Arbejde: antal sammeligninger Antag at vi har en tabel med n elementer I gennemsnit benyttes n/2 sammenligninger Vi siger at arbejdet for lineær søgning har lineær kompleksitet eller er proportional med n

23 GP8, Martin Lillholm 23 Binær søgning – sorterede data Algoritme for en sorteret (stigende) tabel med n tal –Begynd i midten Gentag indtil vi finder det korrekte element eller vi kun har et forkert element tilbage –Hvis tallet vi søger er mindre end det nuværende element »Søg i den nederste halvdel med udgangspunkt i det miderste element –Hvis tallet vi søger er større end det nuværende element »Søg i den øverste halvdel med udgangspunkt i det miderste element Tavlegennemgang Kompleksitet log 2 (n) – hvorfor ? Hvor 2-tals logaritmen siger hvor mange gange vi kan halvere et tal og stadig få et resultat der er større end eller lig 1. log 2 (n) = log(n)/log(2) hvor log(n) er den naturlige logaritme

24 GP8, Martin Lillholm 24 Sammenligning af lineær og binær søgning

25 GP8, Martin Lillholm 25 Lineær og binær søgning – implementation Peter Sestofts notenote Vi vender tilbage til L&L’s implementation, der er polymorf

26 GP8, Martin Lillholm 26 Sortering Hvad er sortering ? Hvorfor overhovedet sortere? –Fordi vi ønsker sorterede data –Gentagne søgninger –Find de ti største/mindste elementer i en liste –Find identiske elementer i en liste –Find identiske elementer i to lister Der findes mange sorteringsmetoder –Selection sort –Insertion sort –Quick sort –Heap sort –… Forskellige tids- og pladskompleksitet – velegnet til forskellige opgaver

27 GP8, Martin Lillholm 27 Selection sort Givet en liste af tal med n elementer Find det mindste element og fjern det fra listen. Det delvist sorterede resultat består nu af et element Find det næstmindste element – altså det mindste af de tilbageværende elementer – og fjern det fra listen. Tilføj det til listen af sorterede elementer... Fortsæt indtil den oprindelige liste er tom I praksis benyttes en og samme tabel til både den sorterede og den usorterede del Tavlegennemgang

28 GP8, Martin Lillholm 28 Selection sort Hvor meget arbejde kræver selection sort? Vi kan finde det mindste af m elementer ved brug af m-1 sammenligninger Generelt gælder: For en n lang liste: I praksis dominerer ½n 2 for store n og vi siger at arbejdet er asymptotisk proportionalt med n 2. I såvel teori som praksis er selection sort langsom!

29 GP8, Martin Lillholm 29 Selection sort – implementation Peter Sestofts notenote Insertion sort, Quick sort, Merge sort, Heap sort...

30 GP8, Martin Lillholm 30 Andre sorteringsmetoder – teori

31 GP8, Martin Lillholm 31 Andre sorteringsmetoder – praksis

32 GP8, Martin Lillholm 32 Polymorfe implementationer af søgning og sortering L&L PhoneList2.java side 508 (søgning) i BlueJ L&L PhoneList.java side 500 (sortering) i BlueJ


Download ppt "GP8, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 8 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder."

Lignende præsentationer


Annoncer fra Google