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!