Javaprogrammering - Del 2. Instans- kontra klassvariabler. Instans- kontra klassmetoder

Relevanta dokument
LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Javaprogrammering - Del 1. Kursupplägg. Hello world. Kompilera. Kör. Environmentvariabler. föreläsningar övningar 1, 2, 3 och 4 INLÄMNINGSUPPGIFT 2

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Språkkonventioner och redigering av tal.

Konstruktion av klasser med klasser

Klasshierarkier. Klasser kan byggas på redan definierade klasser

DI-institutionen Sid 1 av 5 Hans-Edy Mårtensson Sten Sundin Micael Karlsson

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Kort om klasser och objekt En introduktion till GUI-programmering i Java

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

FactoryCast HMI. Premium & Quantum PLC. Applets

Att skriva till och läsa från terminalfönstret

Objektorienterad Programmering (TDDC77)

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert AWT. Paket för hantering av grafik

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Klasshierarkier - repetition

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

TENTAMEN OOP

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin Micael Karlsson

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

F4. programmeringsteknik och Matlab

Lab5 för prgmedcl04 Grafik

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Grafiska komponenter.

DAT043 - Föreläsning 7

Lösningar för tenta 2 DAT043,

TENTAMEN OOP

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

l uppgiftsformulering l algoritmkonstruktion l verifikation l kodning l testning och avlusning l validering l dokumentering l underhœll Kapitel 2

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y;

//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

Laboration 1 - Grunderna för OOP i Java

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

Objektorienterad programmering i Java

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

Applets med komponenter

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Laboration 3, uppgift En klass för en räknare

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

Java: kort introduktion. Trådar. Något om mutex, Dekkers algoritm och monitorer. Javas ("inbyggda monitor") synchronized.

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

TDDD78 Viktiga begrepp, del 2

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Lösningsförslag till tentamen

Classes och Interfaces, Objects och References, Initialization

OOMPA 2D1359 Föreläsning 3

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Klasser och Objekt i Java. C++ använder beteckningarna datamedlem resp. medlemsfunktion. Klassdefinition. Exempel: Variabler

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Del A (obligatorisk för alla)

Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

OOP Objekt-orienterad programmering

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Tentamen ID1004 Objektorienterad programmering May 29, 2012

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

Transkript:

Javaprogrammering - Del 2 Instans- och klassvariabler (static) Skräpsamling Exceptions Arv, klasser och interface, Paket Inledande om Applet - roten ur tal 1 Instans- kontra klassvariabler instansvariabel allokeras ny för varje instans INTE static klassvariabel allokeras vid programstart ETT ex oavsett antal instanser class-wide-variable SKA VARA static 2 Instans- kontra klassmetoder instansmetod har en osynlig parameter this this refererar struct med instansvariablerna kan peta på instansvariabler kan peta på klassvariabler klassmetod har ingen osynlig this-parameter kan INTE peta på instansvariabler kan peta på klassvariabler 3

Skriva C-program i Java/C++ gör allting static rekommenderas inte kanske ibland... säkerhetskritiska system 4 Komplexa tal - program en klass complex_c klassvariabel antal_komplexa_tal räknar antalet instanser privata instansvariabler re och im en enkel instansmetod för utskrift sist och slutligen en klassmetod main main-metoden 5 complex_c - 1 public class complex_c public static int antal_komplexa_tal = 0; public complex_c() this( 0, 0 ); // complex_c 6

complex_c - 2 public complex_c( float re, float im ) this.re = re; this.im = im; complex_c.antal_komplexa_tal++; // complex_c 7 complex_c - 3 public void skriv_tal() System.out.print( this.re + " + " + this.im + "i" ); // skriv_tal private float re, im; 8 complex_c - 4 public static void main( String args[] ) complex_c cvektor[] = new complex_c[3]; for ( int index = 0; index < 3; index++ ) cvektor[index] = new complex_c(); // while System.out.println( complex_c.antal_komplexa_tal + " objekt allokerade." ); // main // class complex_c 9

Körexempel - complex_c 10 main-funktion med problem instansräknare räknas upp vet inte när den räknas ner om det ändå fanns en destruktor... 11 complex_c - finalize-metod protected void finalize() throws Throwable super.finalize(); complex_c.antal_komplexa_tal--; // finalize 12

Ny mainmetod - 1 public static void main( String args[] ) complex_c cvektor[] = new complex_c[3]; for ( int index = 0; index < 3; index++ ) cvektor[index] = new complex_c(); // while 13 Ny mainfunktion - 2 complex_c snart_ur_scope = new complex_c(); System.out.println( complex_c.antal_komplexa_tal + " med snart_ur_scope." ); System.out.println( complex_c.antal_komplexa_tal + " utan snart_ur_scope." ); // main // class complex_c 14 Körexempel 15

Skräpsamling igen snart_ur_scope = null kan provas ovan hjälper inte FÖRSKRÄCKLIGT i C/C++ m.fl. destroy, free e.d. ska användas helt OK i Java vill att referensräknare räknas ner 16 Mer om arv kan bara ärva en klass i Java multipla arv stöds inte flera interface går bra implementeras 17 Slutgiltiga klasser public final complex_c klassen kan inte ärvas java.lang.system är en sådan klass låser funktionalitet på viss nivå inga svårfunna beroenden till subklasser 18

Superklass alla klasser har en superklass inget extends då ärver klassen från Object Object wait, notify för trådar equals, clone tostring m.fl. (jämför void * i C/C++) 19 Skydda data och metoder - 1 public alla kan komma åt dem protected subklasser kommer åt klasser i samma paket kommer åt 20 Skydda data och metoder - 2 paketåtkomst kommer åt inne i paketet private bara klassen själv 21

Tips gör oftast instansvariabler privata ha så få instansvariabler som möjligt gör interna hjälpmetoder privata då de inte ska anropas utifrån public för variabler kanske inte alltid så farligt jämför struct i C 22 Exceptions utnyttjas flitigt i Java goto usch och fy finns inte i Java throw exception goto nearest exception handler kan poppa anropsstacken 23 Egen exception - 1 lagra ett tal loopa runt och läs ett nytt tal addera udda tal dividera med jämna tal fortsätt vid division med 0 egen exceptionhantering spåra ur kontrollerat vid fel inmatning 24

Egen exception - 2 // Att kastas vid division med 0 public class div_0_exc extends Exception 25 Egen exception - 3 import java.io.bufferedreader; import java.io.inputstreamreader; class num_c 26 Egen exception - 4 public num_c( int tal ) this.num = tal; // num_c public void addera( int tal ) this.num = this.num + tal; // addera 27

Egen exception - 5 public void dividera( int tal ) throws div_0_exc if ( tal == 0 ) throw new div_0_exc(); ////////////////////////////// this.num = this.num / tal; // dividera 28 Egen exception - 6 public int varde() return this.num; private int num = 0; 29 Egen exception - 7 public static void main( String args[] ) BufferedReader kbd_reader = new BufferedReader( new InputStreamReader( System.in ) ); int tal = 1; String buf; num_c num = new num_c( 14 ); System.out.println( "Startar med: " + num.varde() ); System.out.println( "Adderar udda tal." ); System.out.println( "Dividerar jämna tal." ); 30

Egen exception - 8 try while ( tal!= 99 ) System.out.print( "Ge ett tal (99 avslutar): " ); buf = kbd_reader.readline(); tal = Integer.parseInt( buf ); 31 Egen exception - 9 if ( tal % 2 == 1 ) num.addera( tal ); else try num.dividera( tal ); catch ( div_0_exc exc ) System.out.println( "Ojdå! Division med 0" ); 32 Egen exception - 10 System.out.println( "Nu är talet: " + num.varde() ); // try catch ( Exception exc ) System.out.println( "Fel inmatning / tangentbordsfel" ); // catch // main // class num_c 33

Körexempel 34 Interface klass kan implementera man vet då klassens gränssnitt klar fördel vid integration av subsystem liknar en abstrakt klass men implementerar ingenting nackdel man vet inte vad man får... 35 Integralprogram funktions-interface specar hur mattefunktioner ska skrivas en integrallösare löser integraler vet att funktioner ser ut som interfacet 36

funktion_i public interface funktion_i public float f( float x ); public float derivatan( float x ); public float anti_derivatan( float x ); 37 integral_c public class integral_c public float integralen( funktion_i fkn, float a, float b ) return fkn.anti_derivatan( b ) - fkn.anti_derivatan( a ); 38 sin_c public class sin_c implements funktion_i public float f( float x ) return (float)math.sin(x); public float derivatan( float x ) return (float)math.cos(x); public float anti_derivatan( float x ) return -(float)math.cos(x); // sin_c 39

ploynom_c public class polynom_c implements funktion_i public float f( float x ) return x*x - x + 3.0f; public float derivatan( float x ) return 2.0f*x - 1.0f; public float anti_derivatan( float x ) return x*x*x/3.0f - x*x/2.0f + 3.0f*x; // polynom_c 40 integral_test_c - main - 1 import java.io.*; public class integral_test_c public static void main( String args[] ) sin_c sinfunktion = new sin_c(); polynom_c polynom = new polynom_c(); integral_c losare = new integral_c(); 41 integral_test_c - mainfkn - 2 System.out.println( "Sinusintegral: " + losare.integralen( sinfunktion, 1.0f, 3.0f ) ); System.out.println( "Polynomintegral: " + losare.integralen( polynom, 1.0f, 3.0f ) ); // main // integral_test_c 42

Körex - integral_test_c 43 Paket i Java specificerar katalogstruktur grupperar klasser, objekt, variabler m.m. t.ex. java.lang - för javaspråket java.io - in-/utmatning java.awt - grafiska gränssnitt 44 Paketering av integral skapa katalog c:\eget\java\ht01\folex\integral_pkg lägg all källkod i katalogen package integral_pkg; överst (ta bort public class överallt ==> endast paketåtkomst) speca paket vid körning java integral_pkg.integral_test_c 45

integral_pkg.polynom_c package integral_pkg; class polynom_c implements funktion_i public float f( float x ) return x*x - x + 3.0f;... som ovan... // polynom_c 46 Kompilering / körning 1. CLASSPATH ska peka ut katalog OVANFÖR. 2. Kan köra varsomhelst ifrån... 47 Applets fyrkantig area i en WEB-sida man kan rita grafik där subklass till Container kan därför innehålla komponenter 48

Grundläggande getappletcontext för kommunik med omvärlden hämtning av bilder finns i Appletklassen kommunik endast med källservern i normala fall 49 Paketet java.applet Applet - basklass för Applets AppletContext - omvkommunik AudioClip - för ljud via browsern AppletStub - lågnivåkoppling applet - browser 50» Object Component Container Panel Applet Arvshierarki 51

En Applets liv - 1 appletkod laddas instansiering av Applet-objekt init anropas låt BLI konstruktorn appleten ska köras start anropas 52 exekvering avslutas stop anropas browsern avslutas destroy anropas En Applets liv - 2 53 En Applets liv - 3 applet ska ritas om paint anropas jämför windows WM_PAINT-hantering 54

Roten ur ett editfält där användaren kan skriva en knapp för att beräkna roten ur med felhantering en label för att presentera resultat 55 Körexempel - Roten ur Start 56 Körexempel - Roten ur Ett tal 57

sqrt_c - 1 import java.awt.button; import java.awt.textfield; import java.awt.label; import java.awt.event.actionlistener; import java.awt.event.actionevent; import java.applet.applet; public class sqrt_c extends Applet 58 sqrt_c - 2 // Inre klass för att lyssna på knapp private class sqrt_btn_listener_c implements ActionListener public void actionperformed( ActionEvent aev ) handle_sqrt_btn(); 59 sqrt_c - 3 // Hantera klick på roten-ur-knapp private void handle_sqrt_btn() String numbuf = this.num_edt.gettext(); boolean okay = false; float num = 0; 60

sqrt_c - 4 try num = new Float( numbuf ).floatvalue(); //!!! Float.parseFloat( numbuf ); //!!! gick inte i IE!!! num = (float)math.sqrt( num ); okay =!Float.isNaN( num ); catch ( Exception exc ) 61 sqrt_c - 5 if ( okay ) this.sqrt_lbl.settext( "Roten ur " + numbuf + " = " + Float.toString( num ) ); else this.sqrt_lbl.settext( "Det måste vara ett positivt tal." ); // handle_sqrt_btn 62 sqrt_c - 6 public void init() super.init(); super.setlayout( null ); this.num_edt = new TextField( "SKRIV TAL HÄR" ); super.add( this.num_edt ); this.num_edt.setbounds( 20, 20, 120, 20 ); this.sqrt_lbl = new Label( "HÄR VISAS ROTEN" ); super.add( this.sqrt_lbl ); this.sqrt_lbl.setbounds( 20, 50, 200, 20 ); 63

sqrt_c - 7 Button sqrt_btn; sqrt_btn_listener_c sqrt_btn_listener = new sqrt_btn_listener_c(); sqrt_btn = new Button( "VISA ROT" ); sqrt_btn.addactionlistener( sqrt_btn_listener ); super.add( sqrt_btn ); sqrt_btn.setbounds( 150, 20, 100, 20 ); // init 64 sqrt_c - 8 private Label sqrt_lbl; private TextField num_edt; // sqrt_c 65 Körexempel - Annan Applet 66

orgiss_c - källkod späckad med kommentarer för javadoc kräver speciell kommentarsstil se N:\JAVA\FOLEX\ORDGISS för fullständigt exempel plattformsoberoende? NEJDÅ prov med alla existerande browsers behövs 67