Introduksjon til Java 5.0. Hva er nytt i 5.0? Generiske typer For-løkke med iterator (for-hver løkke) Automatisk innpakking av primitive typer Metadata.

Slides:



Advertisements
Liknende presentasjoner
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Advertisements

Tabeller av objekter Klassen ArrayList
14 okt. 2003, Arne Maus Inst. for informatikk, UiO
C++ for Java-programmerere
Datafiler og serialisering Tekstfiler Scanner-klassen Binær overføring av data Direkte tilgang til filinnholdet Serialisering LC191D Videregående programmering.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Uke 8 - Mer om: Objekter, klasser og pekere
1 Java 6 Mer om metoder Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo.
Unit testing Gruppe 2: Kjartan Haugen Jon Gunnar Bjørkmo
1 Litt om OO og programmering Arne Maus. 2 OO og Java (og C++, C#)  Arven fra Simula  Programstruktur i Java  Generering av objekter  Beskyttelse.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Gruppe 6 Gunnar Henrik Mathias Morten Ronny Svein Ivar.
Java 12 Mer filbehandling - skrive til fil HashMap Et større eksempel Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Tabeller – Arrays Lage frekvenstabell Norske Bokstaver
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Java 4 Mer om forgreninger While-løkker Ole Christian Lingjærde
Objekt, Instanser og referanser + litt til. Objekter  Instanser  En instans er et objekt av en bestemt klasse  Instanser blir laget ved å kalle klassens.
Objektorientert programmering i PHP del 2
Java 14 Et eksempel fra bioinformatikk: analyse av biologiske sekvenser Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Variasjoner i subklasser.  Prinsippskissen er meget enkel  En abstrakt klasse har en konkret metode og en abstrakt metode  Hver subklasse realiserer.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
IS-102 Klassedefinisjoner
C for Java-programmerere
Oblig4 - forklaringer Arne og Ole Christian.
Tema: Introduksjon Hvorfor Velocity? Installasjon Velocity VS. JSF / JSP Eksempler Oppsumering.
C# for javaprogrammerere
Forside Korteste sti BFS Modifikasjon Dijkstra Eksempel Korrekthet Analyse Øving Spørsmål Dijkstras algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no.
Objekt-orientering og Java
Åsmund Eldhuset asmunde stud.ntnu.no folk.ntnu.no/asmunde/algdat/
Generelt I/O if/else Funksjoner Lists Løkker Dictionaries Annet Listebehandling Klasser Python med noen algdat-anvendelser Åsmund Eldhuset asmunde *at*
Filer Finne minste Finne Største Beregne gjennomsnitt Variabler Tabeller – Arrays Lage frekvenstabell.
Singleton & Adapter Pattern Gruppe 3. Singleton Pattern Sørger for at en klasse kun kan ha en instans Vanligvis implementert med globale variabler –Singleton.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
INF 295 Algoritmer og datastrukturer Forelesning 7 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 2 - kapittel 1 Hans F. Nordhaug (Ola Bø)
Dynamiske nettsider PHP Del 1 – variable. PHP  PHP (Personal Home Page)  Fritt tilgjengelig programmeringsspråk  åpen kildekode  Plattformuavhengig.
Java 11 Programmering med og uten objekter: hva er forskjellen?
OOT Seminar H-97 CORBA Praktisk del. Valg av ORB implementasjon n Har valgt å bruke Visigenic sin ORB implementsjon n ORB’en er 100% Java kodet n Bygger.
1 Kap 06 Ordnede / Sorterte lister Oppgave nr 06_02 Polynomer Klassehierarki Javadokumentasjon.
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
Programmering sif8005. Praktisk informasjon  Innleveringsfrist øvinger: mandag kl  Alle øvinger er obligatoriske  Studass tilgjengelig 6 timer.
CORBA Noen hull som må fylles: ORB Object Adapters CORBA services IDL Factory Objects.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
Föreläsning 13 Programmeringsteknik och Matlab 2D1312/2D1305 Inläsning från fil Skriva till fil StringTokenizer Sortering.
INF1000 (Uke 14) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B.
Main metoden n public static void main(String[] args){ } n Inni denne metoden skjer alt! n Det kan bare finnes en main metode per program. n Den kan ligge.
INF Objektorientert programmering
Programmering i Java versjon september 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Inf1000 (Uke 10) HashMap og ArrayList
INF1000 (Uke 4) Mer om forgreninger, While-løkker
XML og JDOM Helge Furuseth XML  XML = Extensible Markup Language Basert på SGML – Standard Generalized Markup Language  HTML =
Inf1000 (Uke 5) Arrayer, filer og tekst
Kapittel 9 Polymorfi. 9.1 Sein binding Ofte er det perfekt match mellom typen til ein variabel og objektet han refererer til ChessPiece bishop;... bishop.
Kapittel 3 Bruk av klasser og objekt. 3.1 Å lage objekt Eit variabelnamn i Java representerer Ein primitiv verdi (f eks boolean, int ) Eit objekt (f eks.
Containerklasser – klassifikation og brug.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringContainerklasser.2 Mange objekter.
Kapittel 7 Array (lister og tabellar). 7.1 Arrayelement Array (lister, tabellar) er kjent frå VB Blir brukt til å organisere data når vi har mange dataelement.
Typeparametrisering Generel kode (generisk kode).
Iterator i Java boolean hasNext() E next() void remove()
Utskrift av presentasjonen:

Introduksjon til Java 5.0

Hva er nytt i 5.0? Generiske typer For-løkke med iterator (for-hver løkke) Automatisk innpakking av primitive typer Metadata Enum typer Import av statiske funksjoner Formatert I/O (tilsvarende C++ printf) Variabelt antall argumenter

Generiske typer Før: collections opererer på objekter av typen Object Må typecaste det som kommer ut Kompilator sjekker ikke for typer Nå: Kan spesifisere en type til en collection Dette collection objektet godtar kun objekter av riktig type Kompilatoren sjekker typen Trenger ikke å typecaste Spesifiseres med syntaks: ArrayList

Fordeler med Generiske Typer Garanterer at returverdier er av den angitte typen (Trenger ikke å typecaste ved uttak) ArrayList strengliste;... String s = strengliste.get(0); Typesjekking ved kompilering Før: ClassCastException ved kjøretid under uttak Nå: strengliste.add(new Integer(5)) ulovlig Ser derfor bedre hvor feilen skjer

Generiske Typer og Arving 1/2 Generiske typer kan subklasses som normalt ArrayList subklasse av List Generiske typer med ulike typeparametre regnes som ulike typer ArrayList forskjellig fra ArrayList

Generiske Typer og Arving 2/2 G og G er urelaterte selv om B er subklasse av A! List ls = new ArrayList (); //1: OK List lo = ls; // 2: Ikke OK! lo.add(new Object()); // 3 String s = ls.get(0); // 4: attempts to assign an Object to a String!

Supertyper for Generiske Typer 1/2 Ønsker å lage en metode som funker uansett typeparameter Eksempel: Metode for å skrive ut innholdet Første forsøk: void printCollection(Collection c) { for (Object e : c) { System.out.println(e);}} Denne vil bare fungere for en Collection og ikke for andre collections!

Supertyper for Generiske Typer 2/2 Trenger ny formalisme: void printCollection(Collection c) { for (Object e : c) { System.out.println(e);}} indikerer en hvilken som helst type Kan ta ut men ikke legge inn (fordi den faktiske typen er ukjent) Mer generelt: Kan bruke returverdi men ikke sende inn parametre til metoder

Begrensete Ukjente Typer Ønsker å kalle spesifikk funksjon på objektene som kommer ut Eksempel: contains funksjonen for en Shape for å sjekke om et oppgitt punkt er inne i den. public void findContainingShapes(Point p, List shapes) {... } Kan ha flere begrensninger

Generiske Metoder Ønsker å skrive metode som jobber med generiske typer Kan erklære en metode som generisk Bruker følgende syntaks static void fromArrayToCollection(T[] a, Collection c) { for (T o : a) { c.add(o); // correct }} Trenger ikke å oppgi typen i kallet siden den kan utledes av kompilatoren. Brukes hvis returverdi eller andre parametre er avhengige av T (ellers brukes wildcards)

For-løkke med iterator Brukes for å gjøre en operasjon på alle medlemmene av en collection Før: ArrayList list = new ArrayList (); Integer sum; for (Iterator i = list.iterator(); i.hasNext();) { Integer value=(Integer)i.next(); sum = sum + value.intValue(); } Nå: ArrayList list = new ArrayList (); for (Integer i : list) { sum = sum + i.intValue(); }

Automatisk innpakking av primitive typer Java konverterer automatisk mellom primitive typer og innpakningstyper Før: ArrayList list = new ArrayList (); list.add(0, new Integer(42)); int total = (list.get(0)).intValue(); Nå: ArrayList list = new ArrayList (); list.add(0, 42); int total = list.get(0);

Metadata Kan oppgi annotasjoner (metadata) med metoder Kan lage programmer som prosesserer annotasjonene Kan lage nye filer

Metadata Før: public interface PingIF extends Remote { public void ping() throws RemoteException;} public class Ping implements PingIF { public void ping() {... }} Nå (med prosesseringsprogram): public class Ping { void ping() {... }} APT Annotation Processing Tool Skriv klasser for å behandle annotasjonene

Enum typer Man kan nå lage en type som har en oppgitt liste av verdier public enum StopLight { red, amber, green }; StopLight s = StopLight.red; Kan bruke nullverdier

Import av statiske medlemmer Man kan nå importere statiske medlemmer av en klasse med import static Eksempel: import static java.lang.Math.*; Etter denne setningen kan man skrive ”PI” i stedet for ”Math.PI”.

Formatert I/O Utskrift String user; int total; System.out.printf("name count%n"); System.out.printf("%s %5d%n", user,total); Innlasting Scanner s= new Scanner(System.in); String param= s.nextLine(); int value=s.nextInt(); s.close();

Printf Format Beskrivelser %dDesimalt heltall %xHeksadesimalt heltall %fFlyttall med fast komma %eFlyttall med eksponentialnotasjon %gGenerelt flyttall (den korteste av f og e) %aHeksadesimalt flyttall %s Streng %cEnkelttegn %bBoolsk verdi

Variabelt Antall Argumenter Enkelte metoder (som f.eks. printf) tar et variabelt antall argumenter Erklæres med følgende syntaks Void enMetode(Object... args) { } Parameteren ”args” behandles som en array i metoden

Mer Generics – Hvordan Bruke Gammel Kode Rå type – Generic objekt uten typeparameter Collection = Collection Mister typesikkerheten Laget sånn fordi det må være slik for at ny kode skal kunne bruke gammel kode Genererer unchecked warning

Hvordan Generics er Implementert Generics eksisterer bare i kompilatoren Virtual Machine ser ikke generics Kompilator konverterer Collection til Collection og setter inn typecasts hvor nødvendig Typevariable blir konvertert til øverste grense Object for ubegrensete typevariable Årsak: Gjør tilbakekompatibilitet enklere

Konsekvenser av Implementeringa Alle instanser av en generisk klasse Bruker den samme.class fila Har samme type ved kjøretid instanceOf kan ikke sjekke typeparametre Casts med typeparametre lager unchecked advarsler Kan ikke lage array objekter med elementer med typeparameter

Array Eksempel List [] lsa = new List [10]; // not really allowed Object o = lsa; Object[] oa = (Object[]) o; List li = new ArrayList (); li.add(new Integer(3)); oa[1] = li; // unsound, but passes run time store check String s = lsa[1].get(0); // run-time error - ClassCastException

Øving 1 – Bruk av Generiske Typer Idrettsresultater Skal skrive inn X antall resultater Resultatene er positive flyttall Avslutt med et negativt tall Programmet skal så skrive ut Gjennomsnittet For hver utøver: hvor mye han/hun er over snittet

Øving 2 – Skriv Generisk Metode Lag en statisk metode som tar inn et Pair av en type som implementerer Comparable Metoden skal ordne paret slik at det minste elementet er først.

Øving 3 – Skriv Subklasse til Generisk Type Skriv en subklasse til Pair som er uordnet, dvs at Pair(”A”, ”B”) er lik Pair(”B”, ”A”) i følge equals metoden

Øving 4 – Avansert Generisk Metode Skriv en metode som sorterer en vilkårlig sorterbar collection med MergeSort algoritmen.