Exempel på spelprogrammering i java.

Relevanta dokument
Monday, November 16, Senaste Labben

Klasser som datastrukturer

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

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

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

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

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

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Objektorienterad Programmering (TDDC77)

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

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

DAT043 - Föreläsning 7

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

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

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

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

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Objektorienterad Programmering (TDDC77)

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

Tentamen i Objektorienterad programmering

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

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

Lektion Händelsehanterare

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

Klasshierarkier - repetition

Classes och Interfaces, Objects och References, Initialization

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

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

TENTAMEN OOP

Föreläsning 2, vecka 6: Tillstånd i objektorienterade program (och mera interface)

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

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

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

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

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

Malmö högskola 2008/2009 CTS

Java-syntax (arv) Exempel: public class Crow extends Bird {... } Jämför med Lab 1: public class FirstApp extends Frame {... }

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

För att hitta filen gå till mappen NetBeansProjects. Välj undermappen med rätt projekt, och sedan undermapp dist. Där ligger.jar-filen.

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

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

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

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

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Imperativ programmering. Föreläsning 4

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

Laboration 1 - Grunderna för OOP i Java

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

Föreläsning 13 Innehåll

Objektorienterad Programmering (TDDC77)

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

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

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

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Föreläsning 14: Grafik & mera händelsehantering

TENTAMEN OOP

Java, klasser, objekt (Skansholm: Kapitel 2)

Föreläsning 5-6 Innehåll

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

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

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

DD1342 Programkonstruktion för F1,

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

PROGRAMMERINGSTEKNIK TIN212

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

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

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

Tentamen. Lösningsförslag

F4. programmeringsteknik och Matlab

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

Föreläsning 15: Repetition DVGA02

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

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

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

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

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

OOP Objekt-orienterad programmering

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Konstruktion av klasser med klasser

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

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

Arv och polymorfi. Lite terminologi; Basklass eller superklass: En klass som fungerar som bas för vårt arv. Vi skapar nya klasser utifrån den.

Tentamen. DD2385 Programutvecklingsteknik vt Fredagen den 5 juni 2009 kl Inga hjälpmedel utom penna, sudd och linjal

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

Exempel på användning av arv: Geometriska figurer

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Transkript:

Exempel på spelprogrammering i java http://www.brackeen.com/javagamebook/

Chatten?

Overloading Vi kan ha flera olika metoder med samma namn Dessa måste i så fall skiljas genom olika signaturer: parametrarnas typ och antal int sum (int n1, int n2) { Exempel return n1+n2; int sum(int n1, int n2, int n3) { return n1+n2+n3;

int sum (int n1, int n2) { return n1+n2; int sum(int n1, int n2, int n3) { return n1+n2+n3; sum(2,7); sum(3,5,9);

int sum (int n1, int n2) { return n1+n2; int sum(int n1, int n2, int n3) { return n1+n2+n3; sum(2,7); Anropar denna sum(3,5,9);

int sum (int n1, int n2) { return n1+n2; int sum(int n1, int n2, int n3) { return n1+n2+n3; sum(2,7); sum(3,5,9); Anropar denna

int sum (int n1, int n2) { return n1+n2; int sum(int n1, int n2, int n3) { return n1+n2+n3; Rätt overloadvariant bestäms av signaturen: sum(2,7); parametrarnas antal och typ sum(3,5,9); Anropar denna

Overloading exempel Likartade uppgifter på olika parametertyper (tex println())

Overloading exempel Defaultvärden för parametrar (tex JFrame())

Tumregler Se upp när du använder en metod i något bibliotek att du verkligen använder rätt overloadvariant. Undvik att skriva egna overloaded metoder. Det förvirrar mest.

Klasshierarkier Sanningen bakom extends Ett ovärdeligt sätt att strukturera stora program

Klasshierarkier Sanningen bakom extends Ett ovärdeligt sätt att strukturera stora program Ganska ovärt för små program

Biblioteksanvändning: Subklassning Ex: gör en egen variant av JFrame, med extra metoder class Biljard extends JFrame {... Biljard () { setlayout(...);... Vi kan använda och definiera om alla metoder i JFrame

Arv (inheritance) Givet en klass A kan vi definiera en underklass B med ordet extends i klasshuvudet. Underklassens objekt ärver då allt från överklassen: class A { int x; void f(int z) {... class B extends A { int y;... b = new B(); if (b.x == b.y)... c = b.f(0);

Arv (inheritance) Givet en klass A kan vi definiera en underklass B med ordet extends i klasshuvudet. Underklassens objekt ärver då allt från överklassen: class A { int x; void f(int z) {... class B extends A { int y;... b = new B(); if (b.x == b.y)... c = b.f(0);

class A class B extends A p y g f z h p g f new B() h y z

extends = specialisering Exempel class Ball {... metoder för att rita, flytta, krocka etc class QueueBall extends Ball {... metoder för att skjuta iväg bollen

Klasshierarkier En underklass kan i sig användas som överklass till en ännu mer specialiserad klass: class Business {... class RetailBusiness extends Business {... class KMart extends RetailBusiness {... Här ärver KMart både från RetailBusiness och Business

class A class B extends A class C extends B p y q g z v f h p g f new C() h y z q v

!"#$%&##' 3&,*$4!"#$%&##' /&+0$-&!"#$%&##' ()*+,' )*-.#' ($%12#' Single inheritance: Varje klass har bara en omedelbar överklass som den ärver från. (Java har single inheritance. Tex Python och C++ har multiple inheritance). Arv går i flera led. Om inget sägs är den speciella klassen Object överklass.

Overriding Om en metod som finns i överklassen definieras om i underklassen gäller definitionen i underklassen. Detta kallas overriding. class A { int x; void f(int z) {... class B extends A { int y; void f(int z) {... c = b.f(0);

Overriding Om en metod som finns i överklassen definieras om i underklassen gäller definitionen i underklassen. Detta kallas overriding. class A { int x; void f(int z) {... class B extends A { int y; void f(int z) {... c = b.f(0);

class A class B extends A p h g f z h p g f new B() h z

Exempel JPanel definierar en metod paintcomponent(). Alla underklasser till JPanel ärver denna. Skriver vi ingen ny sådan metod i underklassen så finns den ursprungliga (som ritar en tom yta). Vi kan göra en override och definiera en egen paintcomponent() som innehåller önskad grafik

final Om överklassen deklarerat en metod final så får man inte göra override på den i en underklass. class A { int x; final void f(int z) {... class B extends A { int y; void f(int z) {... Detta används för att hindra omdefinitioner av kritiska metoder i stora system

super Om man definierat om en metod i underklassen men ändå vill använda överklassens metod, använd super. class A { int x; void f(int z) {... class B extends A { int y; void f(int z) {... void g() { y = f(0); y = super.f(0);

super Om man definierat om en metod i underklassen men ändå vill använda överklassens metod, använd super. class A { int x; void f(int z) {... class B extends A { int y; void f(int z) {... void g() { y = f(0); y = super.f(0);

super Om man definierat om en metod i underklassen men ändå vill använda överklassens metod, använd super. class A { int x; void f(int z) {... class B extends A { int y; void f(int z) {... void g() { y = f(0); y = super.f(0);

Exempel class A extends JPanel { override void paintcomponent(graphics g) { super.paintcomponent(g)...

Konstruktorer I underklassens konstruktor lägger Java alltid automatiskt in ett anrop till överklassens konstruktor först. class A { int z; A() { z = 0; class B extends A { int y; B() { y = 1; b = new B(); Här har b.z värdet 0 och b.y värdet 1 eftersom både As och Bs konstruktorer har använts

Om man vill får man i underklassens konstruktor göra ett anrop till överklassens konstruktor med notationen super(). Detta måste då ligga först i konstruktorn. Vanlig användning: för att använda rätt overloadvariant av överklassens konstruktor

Utan super class A extends JFrame { A() {... Inget anrop till JFrames konstruktor. Då sker automatiskt ett anrop till JFrame(), dvs det skapas ett fönster utan titel

Utan super Med super class A extends JFrame { A() {... class A extends JFrame { A() { super( Titel );... Inget anrop till JFrames konstruktor. Då sker automatiskt ett anrop till JFrame(), dvs det skapas ett fönster utan titel Ett anrop till JFrames konstruktor med parametern Titel. Detta innebär ett anrop till JFrame( Titel ), dvs det skapas ett fönster med rubriken Titel.

Abstrakta metoder En abstrakt metod deklareras med ordet abstract och innehåller enbart metodhuvud. Ingen metodkropp! abstract void moveto(position pos); Detta definierar metodens signatur (dvs resultattyp och typ av parametrar). Det definierar inte metodens beteende. En abstrakt metod kan inte exekveras.

Varför abstrakta metoder? Du gör en klass (tex Piece) där du tänker dig underklasser (tex King, Queen, Rook,...) Där finns en metod canmoveto() som avgör om pjäsen kan gå till en viss ruta. Varje underklass måste ha en canmoveto(), men det finns inget meningsfullt default!

Lösning 1 (inte bra): definiera canmoveto() i Piece med ett meningslöst default. Alla underklasser måste göra en override. class Piece { boolean canmoveto(position pos) { return false;

Lösning 1 (inte bra): definiera canmoveto() i Piece med ett meningslöst default. Alla underklasser måste göra en override. class Piece { boolean canmoveto(position pos) { return false; Nackdel: i en underklass kan vi glömma att göra override på canmoveto(), och då oavsiktligt utnyttja det meningslösa defaultet

Lösning 2 (inte heller bra): definiera inte canmoveto() i Piece alls - den definieras bara i underklasserna

Lösning 2 (inte heller bra): definiera inte canmoveto() i Piece alls - den definieras bara i underklasserna Nackdel: Det betyder att canmoveto() inte kan användas i Piece class Piece {... boolean canmoveatall() { for (pos:allpositions) { if (canmoveto(pos)) return true; return false; kräver att canmoveto() definierats i Piece

Vi vill kunna använda canmoveto() i Piece utan att definiera den, och lita på att alla underklasser definierar den

Lösning 3 (mycket bättre): definiera canmoveto() i Piece som abstrakt

Lösning 3 (mycket bättre): definiera canmoveto() i Piece som abstrakt abstract class Piece { abstract boolean canmoveto(position pos); boolean canmoveatall() { for (pos:allpositions) { if (canmoveto(pos)) return true; return false; OK! Fördel: En underklass måste göra en egen canmoveto(). I Piece får vi använda canmoveto()

Skilj mellan abstrakta och tomma metoder! abstract void moveto(position pos); Metoden moveto finns med denna signatur void moveto(position pos) { ; Metoden moveto gör ingenting

Abstrakta klasser En klass som har abstrakta metoder måste deklareras abstract: abstract class Piece { abstract boolean canmoveto(position pos);...

En abstrakt klass får inte instansieras! mypiece = new Piece() Den enda användningen är som överklass till mer specialiserade klasser class King extends Piece {... Underklassen kan ge definitioner av alla överklassens abstrakta metoder class King extends Piece { boolean canmoveto(position pos) {...

abstract class A class B extends A p g g f z h p g f new B() h z

En abstrakt klass får innehålla både vanliga och abstrakta metoder. Om någon metod är abstrakt är klassen abstrakt. Om en underklass inte implementerar alla abstrakta metoder blir underklassen också abstrakt.

abstract class A abstract class B extends A p g z f h new B()

Sammanfattning: Abstrakta klasser är ett sätt att låta java hålla reda på vilka metoder man måste implementera i en underklass

Övning I ett schackspel finns den (abstrakta) klassen Piece med sex underklasser som svarar mot de sex typerna av spelpjäser (kung, dam, torn, löpare, springare, bonde). Ge exempel på: Metoder som finns i Piece och som ärvs av alla underklasser Abstrakta metoder i Piece som definieras i underklasserna Metoder som bara finns i någon underklass

Abstrakta klasser vs interface

Abstrakta klasser vs interface I en abstrakt klass får alla metoderna vara abstrakta.

Abstrakta klasser vs interface I en abstrakt klass får alla metoderna vara abstrakta. Klassen säger då ingenting om något beteende alls, utan bara om en signatur: vilka metoder som ska finnas och vilka typer de och deras parametrar har.

Abstrakta klasser vs interface I en abstrakt klass får alla metoderna vara abstrakta. Klassen säger då ingenting om något beteende alls, utan bara om en signatur: vilka metoder som ska finnas och vilka typer de och deras parametrar har. En signatur är precis det som man behöver veta om en klass för att kunna anropa metoderna.

Abstrakta klasser vs interface I en abstrakt klass får alla metoderna vara abstrakta. Klassen säger då ingenting om något beteende alls, utan bara om en signatur: vilka metoder som ska finnas och vilka typer de och deras parametrar har. En signatur är precis det som man behöver veta om en klass för att kunna anropa metoderna. För att definiera signaturer är det bättre att använda interface än abstrakta klasser

interface Interface används för att definiera signaturer. Ett interface ser ut som en klassdeklaration men med ordet interface istället för class. Den innehåller bara abstrakta metoder. Metoderna blir automatiskt abstrakta - man behöver inte skriva abstract

interface A f g interface A { void f (int i); boolean g(); String h(int i, int j); h new A() Liksom en abstrakt klass får ett interface inte instansieras.

implements

implements För ett interface används ordet implements (och inte extends): om A är ett interface kan man skriva

implements För ett interface används ordet implements (och inte extends): om A är ett interface kan man skriva class B implements A

implements För ett interface används ordet implements (och inte extends): om A är ett interface kan man skriva class B implements A Eftersom A är ett interface och inte en klass finns inget att ärva. Allt i A är abstrakt.

implements För ett interface används ordet implements (och inte extends): om A är ett interface kan man skriva class B implements A Eftersom A är ett interface och inte en klass finns inget att ärva. Allt i A är abstrakt. Istället gör ordet implements ett åtagande: alla abstrakta metoder i A måste implementeras i B. Det får dessutom finnas ytterligare saker i B, men åtminstone metoderna i A måste finnas.

implements För ett interface används ordet implements (och inte extends): om A är ett interface kan man skriva class B implements A Eftersom A är ett interface och inte en klass finns inget att ärva. Allt i A är abstrakt. Istället gör ordet implements ett åtagande: alla abstrakta metoder i A måste implementeras i B. Det får dessutom finnas ytterligare saker i B, men åtminstone metoderna i A måste finnas. implements är alltså ett sätt att i klasshuvudet ange en del av klassens signatur

class B interface A implements A f g h p f g h

class B interface A implements A f g h p f g

En klass kan implementera flera interface och måste då implementera alla abstrakta metoder i interfacen interface A interface B interface C f g h p class D implements A, B, C f g h p

Exempel interface MouseListener { void mouseclicked(mouseevent event); void mousepressed(mouseevent event); void mousereleased(mouseevent event); void mouseentered(mouseevent event); void mouseexited(mouseevent event);

Exempel I klassen JPanel finns en metod addmouselistener() Den tar som enda parameter ett objekt som ska vara en muslyssnare För att det objektet verkligen säkert ska fungera måste det ha metoderna mouseclicked() etc. Alltså, när man skriver addmouselistener(m) måste man vara säker på att m har sådana metoder. Det är man om m är från en klass som implementerar interfacet MouseListener

implements vs extends Använd implements om interface och extends om (abstrakta) klasser En (abstrakt) klass får innehålla också riktiga metoder. Ett interface får bara ha abstrakta metoder. Java har single inheritance: En klass får vara underklass till bara en annan klass En klass får implementera flera interface

interface A interface B abstract class C f g h p h q class D extends C implements A, B f g p Korrekt?

Exempel class MyPanel extends JPanel implements MouseListener, KeyListener { Vi definierar en klass som ärver JPanel. Det ger oss massor av metoder åt grafikhållet Vi måste definiera metodeterna mouseclicked(), keypressed () etc för att uppfylla interfacen. Vi får använda objekt instansierade av MyPanel som parametrar vid anrop till addmouselistener() och addkeylistener()

Encapsulation Namn: identifierar sådant som variabler, metoder, klasser,... Namn skapas vid motsvarande deklaration

Encapsulation Namn: identifierar sådant som variabler, metoder, klasser,... Namn skapas vid motsvarande deklaration Scope ( räckvidd ) för ett namn: den del av koden där namnet kan användas.

Encapsulation Namn: identifierar sådant som variabler, metoder, klasser,... Namn skapas vid motsvarande deklaration Scope ( räckvidd ) för ett namn: den del av koden där namnet kan användas. Encapsulation: Ett sätt att begränsa namnscope till att bara omfatta de ställen där namnen behöver användas

Encapsulation Namn: identifierar sådant som variabler, metoder, klasser,... Namn skapas vid motsvarande deklaration Scope ( räckvidd ) för ett namn: den del av koden där namnet kan användas. Encapsulation: Ett sätt att begränsa namnscope till att bara omfatta de ställen där namnen behöver användas Fördel: Förhindrar felaktig användning Need to know - där namnen inte behövs är de heller inte tillgängliga

Lokala variabler och parametrar Scope = den metod eller kodblock där de deklareras Men vilket scope har klassernas instansvariabler och metoder?

Scope av metoder och instansvariabler Det finns några (4 st) olika möjligheter Programmeraren bestämmer själv när metoden/variabeln deklareras!

1. Public Deklarera public access genom ordet public Innebär att scope = hela universum Användningfall: 1. Där du måste, tex main(), eller i metoder som implementerar interface public static void main (... 2. När du gjort ett programpaket och vill göra delar av det tillgängligt för andra program

2. Protected Deklarera protected access genom ordet protected Innebär att scope = denna package (dvs denna fil, och andra med samma package deklaration) samt alla underklasser till klassen den förekommer Användningfall: Inga (undvik den)

3. Package Deklarera package access genom att inte skriva något särskilt i deklarationen Innebär att scope = denna package (dvs denna fil, och andra med samma package deklaration) Användningfall: För variabler och metoder som måste kunna nås av det egna programmet utanför den egna klassen final static int SIZE = 500;

4. Private Deklarera private access genom ordet private Innebär att scope = denna klass Användningfall: För variabler och metoder som inte behöver nås utanför den egna klassen private Position pos;

Sammanfattning För varje metod/variabel, ta en stund och fundera över: Om den inte ska användas utanför klassen, skriv private I några specialfall, skriv public Om den aldrig får ändras eller overridas, skriv final Om den är gemensam för alla klassens instanser eller saknar vettigt objekt, skriv static

Nästlade klasser En klass kan ligga inuti en annan klass. class Table {... class Position {... Innebär: Position blir en del av Table - har ingen mening utan Table. Är ett sätt att gruppera klasser. En nästlad klass kan ges scope på samma sätt som instansvariabler (private/public etc)

Static nested classes class Table {... static class Position {... För att skapa en ny Position utanför Table skriv Klassen Position hör till hela klassen Table. Alla objekt i Table har samma klass Position, dvs i Position får man inte använda instansvariabler i Table. new Table.Position() yttre klass nästlad klass

Inner classes Nästlad klass som inte är static kallas inner class class Table {... class Position {... Klassen Position hör till objekt av typ Table. Olika objekt i Table har olika klasser Position, dvs i Position får man använda instansvariabler i Table. För att skapa en ny Position utanför Table skriv new thetable.position() objekt som instansierar yttre klass nästlad klass

Lokala klasser Finns också: Klass deklarerad inuti en metod Scope = den metoden Anonyma klasser Klassen ges inget namn. Typen är ett interface. Har inget scope, kan inte refereras

Anonym klass exempel Hittills: En ActionListener behöver en ny klass: button.addactionlistener(new mylistener()); class mylistener implements ActionListener { public void actionperfored(actionevent e) { // do something Interface Metod som uppfyller interfacet

Alternativ med anonym klass: Interface button.addactionlistener(new ActionListener() { public void actionperfored(actionevent e) { // do something. ); Metod som uppfyller interfacet Slipper hitta på klassnamn Metoden actionperformed() definieras precis där lyssnaren registreras

Sista projektet Liten ändring i stort program Jämfört med tidigare: ganska lite kod att skriva Svårigheten är att lista ut vad och var! Arbeta systematiskt. Testkör efter varje liten ändring. Lycka Till!!

Reflektion

Programmering 10 hp Välkomna! Vi kommer att lära oss Skriva enkla men nyttiga program Läsa, begripa och ändra i större program Använda moderna utvecklingsmedel Språken Python och Java Hur datorn fungerar Första föreläsningens första bild

Programmering STS 2012 64 studenter (inget avhopp!!) Kursansvarig, 2 doktorander, 6 äldre studenter Nästa höst kan 15 föreläsningar (2h) det vara du! 30 handledda labpass (4h, 2st 2h) varav 15 med examination Individuellt prov (2h)

Viktiga erfarenheter bryta ner ett större problem i mindre delar och lösa systematiskt Google är din vän RTFM Studenternas egna ord! Förstå först, gör sen!! större förståekse över hur saker och ting fungerar Behåll lugnet. (Det löser sig) Ta hjälp av dina kompisar Dissa Stocken! Fördela tiden bra Var inte rädd för att be om hjälp!! Tänka metodiskt och strukturerat System.out.println ( = sout + tab)

Programmering är inte att knappa in kod

Programmering är inte att knappa in kod Ex: Ett projekt tar 16 timmar

Programmering är inte att knappa in kod Ex: Ett projekt tar 16 timmar Resulterar i 500 rader kod

Programmering är inte att knappa in kod Ex: Ett projekt tar 16 timmar Resulterar i 500 rader kod 16*60/500 = 2, dvs en rad varannan minut

Programmering är inte att knappa in kod Ex: Ett projekt tar 16 timmar Resulterar i 500 rader kod 16*60/500 = 2, dvs en rad varannan minut Att skriva en rad tar max 10 sekunder

Programmering är inte att knappa in kod Ex: Ett projekt tar 16 timmar Resulterar i 500 rader kod 16*60/500 = 2, dvs en rad varannan minut Att skriva en rad tar max 10 sekunder Dvs 10/120 = 8% av tiden är att skriva kod

Programmering är inte att knappa in kod Ex: Ett projekt tar 16 timmar Resulterar i 500 rader kod 16*60/500 = 2, dvs en rad varannan minut Att skriva en rad tar max 10 sekunder Dvs 10/120 = 8% av tiden är att skriva kod Alltså: Det är ineffektivt att optimera koden så att den är lätt att skriva

Planering - kodning - testning Arbeta i små steg

Kodhygien Uppdelning i små metoder / funktioner Vettig användning av whitespace (radbyte och indentering) Bra namnval

Modern programmering är att använda stora plattformar Exempelvis Swing, netbeans Även gigantiska sådana är överkomliga Försök aldrig lära allt utantill Lär dig ett hörn där du vet hur det fungerar Acceptera att det finns sådant du inte vet hur det fungerar Vet hur man ska slå upp och prova

Kursmål Efter godkänd kurs ska den studerande kunna:

Kursmål Efter godkänd kurs ska den studerande kunna: analysera enklare problem och designa lösningar, formulera en strategi för att hantera större problem, arbeta med grundläggande datastrukturer såsom listor av olika slag, systematiskt söka efter, tolka och förstå fel som uppstår, behärska de vanligaste primitiverna i imperativa programspråk, bl.a. Java, behärska grunderna i god programkonstruktion i bl.a. en objektorienterad programmeringsstil, överföra tidigare kunskaper till ett nytt programmeringsspråk, läsa, förstå och göra smärre ändringar i stora förelagda program, återanvända kod som konstruerats av andra, förstå olika roller i en programmeringsprocess, övergripande kunna förklara principerna för hur en dator är uppbyggd och arbetar.

Kursmål Efter godkänd kurs ska den studerande kunna: analysera enklare problem och designa lösningar, formulera en strategi för att hantera större problem, arbeta med grundläggande datastrukturer såsom listor av olika slag, systematiskt söka efter, tolka och förstå fel som uppstår, behärska de vanligaste primitiverna i imperativa programspråk, bl.a. Java, behärska grunderna i god programkonstruktion i bl.a. en objektorienterad programmeringsstil, överföra tidigare kunskaper till ett nytt programmeringsspråk, läsa, förstå och göra smärre ändringar i stora förelagda program, återanvända kod som konstruerats av andra, förstå olika roller i en programmeringsprocess, övergripande kunna förklara principerna för hur en dator är uppbyggd och arbetar.

Kursmål Efter godkänd kurs ska den studerande kunna: analysera enklare problem och designa lösningar, formulera en strategi för att hantera större problem, arbeta med grundläggande datastrukturer såsom listor av olika slag, systematiskt söka efter, tolka och förstå fel som uppstår, behärska de vanligaste primitiverna i imperativa programspråk, bl.a. Java, behärska grunderna i god programkonstruktion i bl.a. en objektorienterad programmeringsstil, överföra tidigare kunskaper till ett nytt programmeringsspråk, läsa, förstå och göra smärre ändringar i stora förelagda program, återanvända kod som konstruerats av andra, förstå olika roller i en programmeringsprocess, övergripande kunna förklara principerna för hur en dator är uppbyggd och arbetar.

Kursmål Efter godkänd kurs ska den studerande kunna: analysera enklare problem och designa lösningar, formulera en strategi för att hantera större problem, arbeta med grundläggande datastrukturer såsom listor av olika slag, systematiskt söka efter, tolka och förstå fel som uppstår, behärska de vanligaste primitiverna i imperativa programspråk, bl.a. Java, behärska grunderna i god programkonstruktion i bl.a. en objektorienterad programmeringsstil, överföra tidigare kunskaper till ett nytt programmeringsspråk, läsa, förstå och göra smärre ändringar i stora förelagda program, återanvända kod som konstruerats av andra, förstå olika roller i en programmeringsprocess, övergripande kunna förklara principerna för hur en dator är uppbyggd och arbetar.

Kursmål Efter godkänd kurs ska den studerande kunna: analysera enklare problem och designa lösningar, formulera en strategi för att hantera större problem, arbeta med grundläggande datastrukturer såsom listor av olika slag, systematiskt söka efter, tolka och förstå fel som uppstår, behärska de vanligaste primitiverna i imperativa programspråk, bl.a. Java, behärska grunderna i god programkonstruktion i bl.a. en objektorienterad programmeringsstil, överföra tidigare kunskaper till ett nytt programmeringsspråk, läsa, förstå och göra smärre ändringar i stora förelagda program, återanvända kod som konstruerats av andra, förstå olika roller i en programmeringsprocess, övergripande kunna förklara principerna för hur en dator är uppbyggd och arbetar.

Kursmål Efter godkänd kurs ska den studerande kunna: analysera enklare problem och designa lösningar, formulera en strategi för att hantera större problem, arbeta med grundläggande datastrukturer såsom listor av olika slag, systematiskt söka efter, tolka och förstå fel som uppstår, behärska de vanligaste primitiverna i imperativa programspråk, bl.a. Java, behärska grunderna i god programkonstruktion i bl.a. en objektorienterad programmeringsstil, överföra tidigare kunskaper till ett nytt programmeringsspråk, läsa, förstå och göra smärre ändringar i stora förelagda program, återanvända kod som konstruerats av andra, förstå olika roller i en programmeringsprocess, övergripande kunna förklara principerna för hur en dator är uppbyggd och arbetar.

Kursmål Efter godkänd kurs ska den studerande kunna: analysera enklare problem och designa lösningar, formulera en strategi för att hantera större problem, arbeta med grundläggande datastrukturer såsom listor av olika slag, systematiskt söka efter, tolka och förstå fel som uppstår, behärska de vanligaste primitiverna i imperativa programspråk, bl.a. Java, behärska grunderna i god programkonstruktion i bl.a. en objektorienterad programmeringsstil, överföra tidigare kunskaper till ett nytt programmeringsspråk, läsa, förstå och göra smärre ändringar i stora förelagda program, återanvända kod som konstruerats av andra, förstå olika roller i en programmeringsprocess, övergripande kunna förklara principerna för hur en dator är uppbyggd och arbetar.

Kursmål Efter godkänd kurs ska den studerande kunna: analysera enklare problem och designa lösningar, formulera en strategi för att hantera större problem, arbeta med grundläggande datastrukturer såsom listor av olika slag, systematiskt söka efter, tolka och förstå fel som uppstår, behärska de vanligaste primitiverna i imperativa programspråk, bl.a. Java, behärska grunderna i god programkonstruktion i bl.a. en objektorienterad programmeringsstil, överföra tidigare kunskaper till ett nytt programmeringsspråk, läsa, förstå och göra smärre ändringar i stora förelagda program, återanvända kod som konstruerats av andra, förstå olika roller i en programmeringsprocess, övergripande kunna förklara principerna för hur en dator är uppbyggd och arbetar.

Kursmål Efter godkänd kurs ska den studerande kunna: analysera enklare problem och designa lösningar, formulera en strategi för att hantera större problem, arbeta med grundläggande datastrukturer såsom listor av olika slag, systematiskt söka efter, tolka och förstå fel som uppstår, behärska de vanligaste primitiverna i imperativa programspråk, bl.a. Java, behärska grunderna i god programkonstruktion i bl.a. en objektorienterad programmeringsstil, överföra tidigare kunskaper till ett nytt programmeringsspråk, läsa, förstå och göra smärre ändringar i stora förelagda program, återanvända kod som konstruerats av andra, förstå olika roller i en programmeringsprocess, övergripande kunna förklara principerna för hur en dator är uppbyggd och arbetar.

Kursmål Efter godkänd kurs ska den studerande kunna: analysera enklare problem och designa lösningar, formulera en strategi för att hantera större problem, arbeta med grundläggande datastrukturer såsom listor av olika slag, systematiskt söka efter, tolka och förstå fel som uppstår, behärska de vanligaste primitiverna i imperativa programspråk, bl.a. Java, behärska grunderna i god programkonstruktion i bl.a. en objektorienterad programmeringsstil, överföra tidigare kunskaper till ett nytt programmeringsspråk, läsa, förstå och göra smärre ändringar i stora förelagda program, återanvända kod som konstruerats av andra, förstå olika roller i en programmeringsprocess, övergripande kunna förklara principerna för hur en dator är uppbyggd och arbetar.

Kursmål Efter godkänd kurs ska den studerande kunna: analysera enklare problem och designa lösningar, formulera en strategi för att hantera större problem, arbeta med grundläggande datastrukturer såsom listor av olika slag, systematiskt söka efter, tolka och förstå fel som uppstår, behärska de vanligaste primitiverna i imperativa programspråk, bl.a. Java, behärska grunderna i god programkonstruktion i bl.a. en objektorienterad programmeringsstil, överföra tidigare kunskaper till ett nytt programmeringsspråk, läsa, förstå och göra smärre ändringar i stora förelagda program, återanvända kod som konstruerats av andra, förstå olika roller i en programmeringsprocess, övergripande kunna förklara principerna för hur en dator är uppbyggd och arbetar.

Resultat Moment Innehåll % klara Pythonkramning Python vs Matlab 97 % Bubblesort Enkla datastrukturer 100 % Vanligaste ordet Algoritmer och strukturer 100 % Epostadresser Algoritmer och strukturer 98 % Assembler Datorns uppbyggnad 100 % Individuellt Python Enklare problem. Arbete under tidpress 95 % Javakramning Python vs Java 95 % Duellen Klassbegreppet 95 % Klockan Swing. Bibliotek. 98 % Biljard Realtidssimulering. 98 % Chat Design av större program 81% hittills Control Penetrera stora program

Nu är det snart slut! En föreläsning kvar: gästföreläsning om den mänskliga faktorn i programutveckling Tre labtillfällen Ett reservtillfälle 21/12 (boka tid med mig) Omprov i januari

Tack för mig! Vi ses i labbet!