1 / 32

Martin Lillholm

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. Obligatorisk opgave. Var opgaven til i onsdags For nem For svær

shalin
Download Presentation

Martin Lillholm

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Obligatorisk opgave • Var opgaven til i onsdags • For nem • For svær • 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. ”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. Evaluering • Hvorfor overhovedet evaluere ? • Hvor mange har overhovedet evalueret ? • Husk det nu !!

  5. Projekter • Hvorfor projekter i GP ? • Projektforslag næste gang • Projektdag den 9. november

  6. Sidste gang • Nedarvning • Skrivning til tekstfil

  7. Denne gang • Wrapper klasser • Interfaces • Typer i Java • Polymorfi • Søgning og sortering

  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 mellemprimitive typer og objektyper • Polymorfi • Hjælpemetoder (L&L appendiks M)

  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. 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. 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. Nedarvning Ansat Studerende TAP Person VIP • 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

  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. 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. 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 hvist1 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. 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. Polymorfi Mirriam-Webster Online: Main Entry: poly·mor·phismFunction: 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·phicadjective- poly·mor·phi·cal·lyadverb • “Almindelig” reference • “Polymorf” reference – subtyper – kompatibilitet • Sen binding (late binding)

  18. Polymorfi gennem arv eksempler Ansat Studerende TAP Person VIP 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

  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. 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. 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. 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. 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 log2(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. log2(n) = log(n)/log(2) hvor log(n) er den naturlige logaritme

  24. Sammenligning af lineær og binær søgning

  25. Lineær og binær søgning – implementation • Peter Sestofts note • Vi vender tilbage til L&L’s implementation, der er polymorf

  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. 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. 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 ½n2for store n og vi siger at arbejdet er asymptotisk proportionalt med n2. • I såvel teori som praksis er selection sort langsom!

  29. Selection sort – implementation • Peter Sestofts note • Insertion sort, Quick sort, Merge sort, Heap sort ...

  30. Andre sorteringsmetoder – teori

  31. Andre sorteringsmetoder – praksis

  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

More Related