320 likes | 443 Views
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
E N D
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
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å?
”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…
Evaluering • Hvorfor overhovedet evaluere ? • Hvor mange har overhovedet evalueret ? • Husk det nu !!
Projekter • Hvorfor projekter i GP ? • Projektforslag næste gang • Projektdag den 9. november
Sidste gang • Nedarvning • Skrivning til tekstfil
Denne gang • Wrapper klasser • Interfaces • Typer i Java • Polymorfi • Søgning og sortering
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)
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
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 ?
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
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
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
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)
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)
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
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)
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
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(); }
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
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 ?
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
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
Lineær og binær søgning – implementation • Peter Sestofts note • Vi vender tilbage til L&L’s implementation, der er polymorf
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
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
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!
Selection sort – implementation • Peter Sestofts note • Insertion sort, Quick sort, Merge sort, Heap sort ...
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