Objekt-orienterat vs funktionellt Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018
|
|
- Rune Sundberg
- för 5 år sedan
- Visningar:
Transkript
1 Objekt-orienterat vs funktionellt Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018
2 Quiz Vad skiljer objekt-orienterade språk från funktionella språk? Funktionella språk har first-class functions, dvs funktioner som värden. Funktionella språk har algebraiska datatyper (ADTs) Objekt-orienterade språk har klasser och objekt med metoder och attribut. Objekt-orienterade språk har arv. Ett språk kan vara både objekt-orienterat och funktionellt. E.g. Scala.
3 Funktioner En funktion (i programmeringstermer) är en operation som tar ett eller flera argument, och ger ett resultat. Quiz: Vad skiljer en funktion från en metod? En statisk metod i Java är en funktion. Vi kallar den bara något annat. En instansmetod i Java är också en funktion, med särskild syntax, där instansen på vilken metoden anropas är ett implicit argument till funktionen. Ibland används distinktionen att en funktion ska vara deterministisk, eller till och med pure, men oftast inte.
4 Funktionella språk Ett programspråk sägs vara funktionellt om det tillåter oss att använda funktioner som om de vore värden ( first-class functions ): Deklarera variabler som representerar funktioner: f = show Applicera funktionsvariabler på argument:. x = f 5 Skicka funktioner som argument till andra funktioner (metoder). map f [1,2,3,4,5] Skapa anonyma funktioner som värden: map (\x -> x+5) [1,2,3,4,5] Exemplen givna med Haskell-syntax
5 Lambda expression Termen lambda expression ( lambda-uttryck ) beskriver just en funktion som används anonymt. Ursprunget är Alonzo Church s Lambda calculus. (\x -> x+5) = λx.x+5 Ta ett argument, som vi kallar x, och gör så här
6 Lambdas och Java I Java 8 (2014) har vi fått stöd för lambda expressions i Java. Vad vi kan göra med dessa är dock lite begränsat, jämfört med ett riktigt funktionellt språk. Problemet ligger i hur vi kan deklarera en funktions-typ. Java är ett statiskt typat språk, så allt måste ges en typ. I språk som (e.g.) Haskell finns enkel syntax för funktionstyper: f :: Int -> Int Java har historiskt inget sätt att skriva ut funktionstyper, och de som designade Java 8 ville inte göra för stora avsteg från Java s kärna.
7 Funktioner som objekt Det klassiska sättet, i Java innan version 8, att representera (något som liknar) funktioner var att gömma dem inuti ett objekt: public interface MyFunctionType { public int apply(int x); public class MyAddFive implements MyFunctionType { public int apply(int x) { return x+5; ; MyFunctionType f = new MyAddFive(); int y = f.apply(5); int[] xs = { 1,2,3,4,5 ; int[] ys = new int[xs.length]; for (int i = 0; i < xs.length; i++) { ys[i] = f.apply(xs[i]);
8 I Haskell Samma sak, i Haskell, för jämförelse f :: Int -> Int f x = x+5 y = f 5 xs, ys :: [Int] xs = [ 1,2,3,4,5 ] ys = map f xs
9 Anonymous classes Ett lite smidigare sätt, som fungerade även innan Java 8, var att skapa instanser av så kallade anonyma klasser. public interface MyFunctionType { public int apply(int x); MyFunctionType f = new MyFunctionType() { public int apply(int x) { return x+5; ; int y = f.apply(5); Vi definierar klassen samtidigt som vi skapar instansen. Klassen har inget namn, därav anonymous. Allt vi vet om den är att den implementerar MyFunctionType.
10 Anonym klass Samma sak, med anonym klass: public interface MyFunctionType { public int apply(int x); MyFunctionType f = new MyFunctionType() { public int apply(int x) { return x+5; ; int y = f.apply(5); int[] xs = { 1,2,3,4,5 ; int[] ys = new int[xs.length]; for (int i = 0; i < xs.length; i++) { ys[i] = f.apply(xs[i]);
11 Lambdas Med hjälp av lambdas blir koden ännu lättare: public interface MyFunctionType { public int apply(int x); MyFunctionType f = x -> x+5; int y = f.apply(5); Vi definierar den anonyma klassen med hjälp av förenklad lambda-syntax.
12 Med lambdas Samma sak igen, med lambda-uttryck: public interface MyFunctionType { public int apply(int x); MyFunctionType f = x -> x+5; int y = f.apply(5); int[] xs = { 1,2,3,4,5 ; int[] ys = new int[xs.length]; for (int i = 0; i < xs.length; i++) { ys[i] = f.apply(xs[i]);
13 Med lambdas och arrays som streams Samma sak igen, med lambda-uttryck: public interface MyFunctionType { public int apply(int x); MyFunctionType f = x -> x+5; int y = f.apply(5); int[] xs = { 1,2,3,4,5 ; int[] ys = IntStream.of(xs).map(x -> f.apply(x)).toarray(); Onödigt komplex pga konvertering
14 Med lambdas och bara streams Samma sak igen, med lambda-uttryck: public interface MyFunctionType { public int apply(int x); MyFunctionType f = x -> x+5; int y = f.apply(5); IntStream xs = IntStream.rangeClosed(1,5); IntStream ys = xs.map(x -> f.apply(x)); Streams kommer inte på muntan
15 Functional Interface Ett functional interface i Java är ett interface som deklarerar exakt en public interface MyFunction { public int apply(int x); Vi kan använda lambda expressions som short-hand för objekt som implementerar ett sådant functional interface, e.g. MyFunction f = x -> x+5; int y = f.apply(5); är bara en hjälp ger felmeddelande om interfacet inte uppfyller kriteriet.
16 Lambda syntax Ett lambda expression i Java har följande syntax: En lista av parametrar, e.g. (x,y,z) Om vi bara har en parameter kan vi utelämna parenteserna. Om vi inte tar något argument alls skriver vi () (Lustigt nog har vi inget lambda först.) En pil: -> En method body: { return x+5; Om vår body består av bara ett expression vars resultat ska returneras behöver vi varken { eller return, vi skriver bara uttrycket: x+5 (x,y) -> x+y; x -> x+5; s -> { System.out.println(s); ; () -> 42; Exempel på giltiga lambda expressions i Java.
17 Live code Macro.addTransform
18 Command Pattern Encapsulate the information needed to perform an action at a later time. Invoke the action from external clients without depending on the object the action belongs to. Lägg information som behövs för att utföra ett visst anrop i ett objekt, som kan användas av klienter utan att de behöver veta vad anropet gör internt, eller vem som utför det (cf Chain of Resp.). Syftet med Command Pattern kan dels vara att undvika beroenden mellan klienter och utförare; dels att få makron som kan sekvensieras, skickas mellan objekt, aggregeras, ibland även ges extra funktionalitet (e.g. räkna hur många gånger anropet utförts, undo, ).
19 Command Pattern Command <<Interface>> + execute( ) : Invoker - commands : List<Command> + addcommand(command) : void invoke( ) : Beroendena från Client kan skilja lite mellan olika varianter och användningar. Client ConcreteCommand - receiver : Receiver - state : + execute( ) : Receiver + action( ) : public void execute() { receiver.action( ); Argument- och retur-typer kan skilja mellan olika användningar; jag har valt enklast möjliga i exemplet.
20 CommandPatternför Macro OBS: Även Composite Pattern! Transform <<Interface>> + transform(ipolygon) : IPolygon ExampleTransform + transform(ipolygon) : IPolygon Macro - transforms : List<Transform> + addtransform(transform) : void transform(ipolygon) : IPolygon IPolygon + translate(int,int) : IPolygon DrawPolygons public void transform(ipolygon p) { return p.translate(10,10); Här är ExampleTransform parameteriserad över IPolygon, istället för att ha en specifik IPolygon den anropar action på. Därav streckad pil istället för ifylld.
21 Inte lambdas Lambda expressions är ett smidigt sätt att förkorta kod. Vi kan dock göra mer med anonyma klasser än vad lambdas klarar: En anonym klass kan användas även när interfacet i fråga inte är functional, dvs har fler (eller färre) än exakt en metod. Skriver vi ut hela klassen kan vi även inkludera attribut, och t ex få state: MyFunctionType f = new MyFunctionType() { public int counter = 0; public int apply(int x) { counter++; return x+5; ; Självklart borde vi använda en getter istället för att göra counter public... int y = f.apply(5); int n = f.counter;
22 Quiz Java 8 har lambdas är Java funktionellt nu? Svar: Nej. Lambdas är inte first-class functions, av flera skäl: Det är inte funktionen som lagras i f i koden nedan; det är objektet som funktionen bor i. MyFunction f = x -> x+5; int y = f.apply(5); Vi kan inte applicera e.g. f(5) f har typen MyFunction, inte int -> int. Vi kan alltså inte använda f i situationer där vi förväntar oss något som implementerar ett annat functional interface, även om detta andra interface också specificerar en metod som tar en int och returnerar en int. och first-class functions är inte allt som definierar det funktionella paradigmet.
23 Objekt vs ADTs I funktionella språk används algebraiska datatyper, e.g.: data MyIntTree = Leaf Int Node MyIntTree MyIntTree En ADT består av olika konstruktorer (inte samma sak som constructors i Java), som kan ta argument. Dessa konstruktorer definierar olika varianter av typen. En ADT kan plockas isär med hjälp av pattern matching, där olika varianter ger upphov till olika beteende, e.g.: sumtree (Leaf n) = n sumtree (Node l r) = sumtree l + sumtree r
24 Enums Javas Enum-klasser ger oss en väldigt rudimentär form av ADTer: Enums kan specificera en lista av olika varianter. Varianterna i en enum kan inte ta argument. Varianterna i en enum kan inte vara rekursiva (följer av att de inte kan ta argument). public enum SignalStatus { RED, TOGREEN, GREEN, TORED; Vi skulle inte kunna implementera e.g. MyIntTree som en enum.
25 Quiz Ponera att vi vill definiera en datatyp som består av ett antal varianter (e.g. Polygon: Square, Rectangle, ). Hur skiljer sig koden när vi använder objekt, respektive en algebraisk datatyp, för att åstadkomma detta? Svar: De två är varandras transponering. (Obs: Min användning av termen transponering här är inte generellt vedertagen (än).)
26 Transponering När vi arbetar med objekt grupperar vi varianter (med data) tillsammans med de grundläggande metoder som arbetar över datan. Olika varianter, även om de är relaterade, definieras separat. E.g. Vi definierar en Triangle och dess data tillsammans med dess metoder, e.g. paint och translate, tillsammans, men separat från en Rectangle och dess data och metoder. När vi arbetar med ADTs grupperar vi alla varianter (med data) som är relaterade i en gemensam datatyp. Olika funktioner över denna datatyp läggs separat. E.g. Vi definierar en datatyp med (bl a) varianterna (konstruktorerna) Triangle och Rectangle. Metoderna för dessa, e.g. move eller getcenterpoint, definieras var och en för sig för alla varianter samtidigt, men separat från varandra.
27 Matris över varianter och funktioner Polygon Square Rectangle Triangle Hexagon translate Square.translate Rectangle.translate Triangle.translate Hexagon.translate rotate Square.rotate Rectangle.rotate Triangle.rotate Hexagon.rotate scale Square.scale Rectangle.scale Triangle.scale Hexagon.scale paint Square.paint Rectangle.paint Triangle.paint Hexagon.paint
28 Objekt: Variant med funktioner Polygon Square Rectangle Triangle Hexagon translate Square.translate Rectangle.translate Triangle.translate Hexagon.translate rotate Square.rotate Rectangle.rotate Triangle.rotate Hexagon.rotate scale Square.scale Rectangle.scale Triangle.scale Hexagon.scale paint Square.paint Rectangle.paint Triangle.paint Hexagon.paint
29 public interface Polygon { public Polygon rotate(double degrees); public Polygon translate(int x, int y); public Polygon scale(double x, double y); public void paint(graphics g); public class Square implements Polygon { public Polygon rotate(double degrees){ public Polygon translate(int x, int y){ public Polygon scale(double x, double y){ public void paint(graphics g){ ; public class Rectangle implements Polygon { public Polygon rotate(double degrees){ public Polygon translate(int x, int y){ public Polygon scale(double x, double y){ public void paint(graphics g){ ; Osv för andra varianter
30 ADT: Funktion med varianter Polygon Square Rectangle Triangle Hexagon translate Square.translate Rectangle.translate Triangle.translate Hexagon.translate rotate Square.rotate Rectangle.rotate Triangle.rotate Hexagon.rotate scale Square.scale Rectangle.scale Triangle.scale Hexagon.scale paint Square.paint Rectangle.paint Triangle.paint Hexagon.paint
31 data Polygon = Square Rectangle Triangle Hexagon rotate :: Double -> Polygon -> Polygon rotate phi (Square ) = rotate phi (Rectangle ) = rotate phi (Triangle ) = rotate phi (Hexagon ) = translate:: Int -> Int -> Polygon -> Polygon translate x y (Square ) = translate x y (Rectangle ) = translate x y (Triangle ) = translate x y (Hexagon ) = Osv för andra funktioner
32 Quiz Tänk extensibility: På vilka sätt kan vi utöka funktionaliteten, utan att ändra existerande kod när vi arbetar med ADTer? när vi arbetar med (hierarkier av) objekt? På vilket sätt kan vi inte utöka funktionaliteten utan att ändra kod? Svar: Med ADTer kan vi lägga till funktioner, men inte varianter. Med objekt kan vi lägga till varianter, men inte funktioner/metoder.
33 The Expression Problem Phil Wadler (FP/Haskell guru) myntade uttrycket som en utmaning: The expression problem is a new name for an old problem. The goal is to define a datatype by cases, where one can add new cases to the datatype and new functions over the datatype, without recompiling existing code, and while retaining static type safety (e.g., no casts). Än så länge har vi ingen bra lösning på detta problem, i något språk. Konsekvens: Vi behöver välja vilken sorts extensibility vi vill kunna tillhandahålla.
34 Live code Visitor
35 Visitor Pattern Separate an algorithm from the object structure it operates over, allowing new algorithms to be added without the objects knowing about them, by introducing methods that allow object type pattern matching. Gör det möjligt att (i efterhand) definiera algoritmer som kan operera över ett antal olika klasser, utan att dessa klasser behöver känna till dem. Ger extensibility i form av att vi kan lägga till fler metoder/beteenden. Visitor låter oss till och med skriva metoder som fungerar över annars helt olika element, av helt olika klasser: E.g. en Car, dess Engine samt den World den befinner sig i. Visitor ger också double dispatch dynamisk bindning baserad på två (dynamiska) typer.
36 Visitor Pattern IVisitor <<Interface>> + visit(concreteelement1) : void + visit(concreteelement2) : void IVisitable <<Interface>> + accept(ivisitor) : void Notera att olika konkreta element som tillåter visitors kan vara av helt orelaterade typer. ConcreteVisitor +visit(concreteelement1) : void +visit(concreteelement2) : void ConcreteElement1 + accept(ivisitor) : void ConcreteElement2 + accept(ivisitor) : void public void accept(ivisitor v) { v.visit(this);
37 Visitor Pattern IPolygonVisitor <<Interface>> + visit(rectangle) : void + visit(triangle) : void IVisitablePolygon <<Interface>> + accept(ivisitor) : void Notera att olika konkreta element som tillåter visitors kan vara av helt orelaterade typer. PolygonLogger +visit(rectangle) : void +visit(triangle) : void Rectangle + accept(ipolygonvisitor) : void Triangle + accept(ipolygonvisitor) : void public void accept(ipolygonvisitor v) { v.visit(this);
38 Sidbyte Med Visitor Pattern byter vi i någon mening sida: Vi gör det möjligt att lägga till nya algoritmer (metoder) i efterhand. Vi har dock låst objekt-strukturen, och eventuella nya klasser vi lägger till kan inte använda sig av de algoritmer vi skrivit tidigare. Visitor Pattern kräver också att Visitor-objektet känner till (och därför beror på) alla olika klasser den kan besöka. Slutsats: Visitor Pattern låter oss behandla (grupper av) klasser som om de vore ADTs (typ, nästan).
39 Servant Pattern Define extra behavior (methods) for a group of classes separate from the classes themselves. Definiera hjälp-funktioner för klasser separat från klasserna själva. Dvs kombinera dessa klassers publikt användbara metoder för att tillhandahålla mer avancerade beteenden och beräkningar. En sådan hjälp-funktion kommer typiskt vara static, och ta som första argument det objekt den ska utföra beräkningen eller beteendet på. Dvs gör det implicita argumentet explicit precis som i e.g. Haskell! Funkar ofta bra tillsammans med Visitor Pattern, men kan också användas enskilt.
40 Servant Pattern Servant Pattern innebär att vi lägger till funktioner som vi skulle gjort i funktionella språk genom att definiera dem separat, med hjälp av redan existerande funktioner (ofta genom Visitor pattern). Av vissa kallat ett anti-pattern (dvs dålig design). Sådana funktioner kan lika gärna läggas som default-metoder i det interface de arbetar över, eller som template methods i en abstrakt superklass. Dock inte i efterhand utan att ändra i kod kräver tanke före. Kan dock ha sina användningar: Som en del i en Facade, som ska tillhandahålla förenklad funktionalitet. När vi vill definiera nya funktioner över klasser som ligger i ett bibliotek vi inte kan ändra på.
41 Visitors och Interface Segregation Interface Segregation Principle säger att vi vill ha små, väldefinierade gränssnitt. Detta är mycket relevant att tänka på när vi implementerar Visitor Pattern. Om vi definierar ett enda gränssnitt Visitor som specificerar ett antal olika element att besöka, då måste en Visitor definiera kod för att hantera alla dessa olika. Men vi kanske bara vill besöka en eller två av dem? ISP to the rescue: Definiera små gränssnitt, och sätt ihop dem till större vid behov.
42 Sammanfattning Java lambdas = poor functions (men användbara). Java enums = broke ADTs (men användbara). OO har metoder på insidan, FP har metoder externt. Visitor Pattern låter oss byta sida och definiera metoder externt, men till kostnaden att vi inte längre enkelt kan lägga till fler varianter Vi byter en sorts extensibility mot en annan.
43 What s next Block 8-1: Tentamensinfo!!!
Objekt-orienterat vs funktionellt Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017
Objekt-orienterat vs funktionellt Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017 Quiz Vad skiljer objekt-orienterade språk från funktionella språk? Funktionella språk har first-class
Läs merObjekt-orienterat vs funktionellt Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
Objekt-orienterat vs funktionellt Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Quiz Vad skiljer objekt-orienterade språk från funktionella språk? Funktionella språk har first-class
Läs merLambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017
Lambdas (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017 Funktioner En funktion (i programmeringstermer) är en operation som tar ett eller flera argument,
Läs merGenerics och polymorfism. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
Generics och polymorfism Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Live code Pair public class Pair { private A a; private B b; public A getfirst() { return a; public
Läs merGenerics och polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018
Generics och polymorfism Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018 Live code Pair public class Pair { private A a; private B b; public A getfirst()
Läs merStatic vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018
Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design (DIT95) Niklas Broberg, 2018 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon
Läs merClasses och Interfaces, Objects och References, Initialization
Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class
Läs merSubtyping, co- och contra-variance. Objekt-orienterad programmering och design Alex Gerdes, 2016
Subtyping, co- och contra-variance Objekt-orienterad programmering och design Alex Gerdes, 2016 Typer Java har två sorters typer primitiva typer och referens-typer. Primitiva typer är typer för värden:
Läs merGeneric type declarations. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
Generic type declarations Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Polymorfism Polymorfism är värdefullt ger hög grad av reuseability och extensibility. You know this by
Läs merClasses och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Abstract class En abstract class är en class som inte kan skapa några objekt. Syfte:
Läs merStatic vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016
Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design Alex Gerdes, 2016 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon tripoly =
Läs merSubtyping, co- och contra-variance. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Johannes Åman Pohjola, 2017
Subtyping, co- och contra-variance Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Johannes Åman Pohjola, 2017 Idag pratar vi om statiska typer...om inte annat anges. Subtypsrelationen
Läs merPrinciples of subclasses. Objekt-orienterad programmering och design Alex Gerdes, 2018
Principles of subclasses Objekt-orienterad programmering och design Alex Gerdes, 2018 Implementation inheritance Subclassing, eller implementation inheritance (implementationsarv), ger oss två fördelar:
Läs merUML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
UML Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 UML Unified Modelling Language Grafiskt modelleringsspråk för att beskriva olika aspekter av objektorienterade system. Vi kommer
Läs merModulär design. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018
Modulär design Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018 Separation of Concern principle Do one thing do it well. Separation of Concern är inte specifikt
Läs merPrinciper, Patterns och Tekniker. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018
Principer, Patterns och Tekniker Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018 Live code DIT952.polygon AbstractPolygon + paint(graphics)
Läs merArv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier
Arv Fundamental objekt-orienterad teknik arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier Programmeringsmetodik -Java 165 Grafisk respresentation: Arv
Läs merSubtyping och variance. Objekt-orienterad programmering och design Alex Gerdes, 2018
Subtyping och variance Objekt-orienterad programmering och design Alex Gerdes, 2018 Typer Java har två sorters typer primitiva typer och referens-typer. Primitiva typer är typer för värden: int, float
Läs merLaboration 1: Figurer i hierarki
Laboration 1: Figurer i hierarki Bakgrund Två grundläggande tekniker i objektorienterad konstruktion är arv och komposition. Mål Laborationen har flera avsikter: 1. Ge kunskaper i hur program kan organiseras
Läs merPrinciples of subclasses Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018
Principles of subclasses Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Implementation inheritance Subclassing, eller implementation inheritance (implementationsarv), ger oss
Läs merMutability och State. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018
Mutability och State Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018 Immutability Ett icke muterbart (immutable) objekt är ett objekt vars tillstånd inte
Läs merModulär design Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
Modulär design Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Vad är ett bra program? I kursen pratar vi om bra kod utifrån ett utvecklar-perspektiv, dvs det som gör koden lätt
Läs merObserver Pattern och MVC. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018
Observer Pattern och MVC Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Model View Controller Model View Controller (MVC) är ett design pattern (architectural pattern) som är
Läs merDAT043 - Föreläsning 7
DAT043 - Föreläsning 7 Model-View-Controller, mer om klasser och interface (arv, ) 2017-02-06 Designmönstret Observer avläser Observer Observable meddelar Observer avläser En eller flera objekt registrerar
Läs merDesign Patterns. Objekt-orienterad programmering och design Alex Gerdes, 2016
Design Patterns Objekt-orienterad programmering och design Alex Gerdes, 2016 Vad är ett design pattern? Ett design pattern (designmönster) är en (ofta namngiven) generell lösning av en vanligt återkommande
Läs merPrinciper, Patterns och Tekniker. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
Principer, Patterns och Tekniker Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Live code DIT952.polygon AbstractPolygon # getpointswithbase(abstractpolygon) : List
Läs merStatic vs Dynamic binding Override vs Overload. Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018
Static vs Dynamic binding Override vs Overload Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018 Quiz: Gissa typen? Object o = new Square(100,100); Polygon p =
Läs merFöreläsning 8 - del 2: Objektorienterad programmering - avancerat
Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta
Läs merPrinciper, Pa+erns och Tekniker. Objekt-orienterad programmering och design Alex Gerdes, 2018
Principer, Pa+erns och Tekniker Objekt-orienterad programmering och design Alex Gerdes, 2018 Live code tda551.polygon AbstractPolygon # getpointswithbase(abstractpolygon) : List # getpoints()
Läs merObserver Pattern och MVC. Objekt-orienterad programmering och design Alex Gerdes, 2016
Observer Pattern och MVC Objekt-orienterad programmering och design Alex Gerdes, 2016 Model View Controller Model View Controller (MVC) är ett design pattern (architectural pattern) som är väldigt vanligt
Läs merKopiering av objekt i Java
1 (6) Kopiering av objekt i Java Först När du läser detta papper bör du samtidigt studera dokumentationen för klasserna Object, Cloneable (java.lang) och ArrayList (java.util). Mycket blir klarare genom
Läs merSeparation of Concern. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018
Separation of Concern Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018 Modulär design Fördelar med välgjord modulär design: Lätt att utvidga Moduler går
Läs mer"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde
Föreläsning 7 "Har en"-relation Arv "Har en" "Är en" Superklassen Object Överskuggning Fordonsexempel Seminarium 2 Relevanta uppgifter Uppgift 31 I exemplet Boll från förra föreläsningen gällde följande
Läs merMer OOP. Variation i typ. Medlen repetition. Generiska klasser. Gränssnitt - Interface. Mer om klasser Några exempel UML
Målet Mer OOP Mer om klasser Några exempel UML Modularitet Språkligt modulära enheter Få gränssnitt Små gränssnitt Tydliga gränssnitt Dold information Återanvändbarhet Variation i typer Variation i datastrukturer
Läs merTDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Mer om Interface Generiska klasser Undantag Nästlade klasser 1
Läs merIdag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes
Idag statiska metoder och variabler private/public/protected final, abstrakta klasser, gränssnitt, delegering wrapper classes ett lite större exempel Objectorienterad programmering Sida 1 Vad vi vet om
Läs merTDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Designmönster Adapter, Factory, Iterator,
Läs merDAT043 - föreläsning 8
DAT043 - föreläsning 8 Paket, generics, Java collections framework 2017-02-07 Paket och tillgänglighet Ovanför klasser finns en hierarkisk namespace med paket. Filer som inte deklareras i något paket finns
Läs merTDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 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 På denna föreläsning: Interface Generiska klasser Undantag
Läs merEtt problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..
Ett problem Kontrollstrukturer och er Hur sparas data T ex när man vill spara resultaten av en tävling Exempel med 3 deltagare: public class Competition private int result1; private int result2; private
Läs merExempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer
Exempel for (int antal=; antal < 75; antal++) System.out.println (antal); Arrayer for (int num=5; num
Läs merObjekt-orienterad programmering och design. DIT953 Niklas Broberg, 2018
Objekt-orienterad programmering och design DIT953 Niklas Broberg, 2018 Kursteamet Niklas Broberg kursansvarig, föreläsare, examinator Johannes Åman Pohjola föreläsare Assistenter: Karin Wibergh Sarosh
Läs merObjektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016
Objektorienterad Programkonstruktion Föreläsning 4 8 nov 2016 Nästade klasser I Java går det att deklarera en klass inuti en annan klass. Vi kallar detta för att en yttre klass innehåller en inre klass.
Läs merF8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander
F8 - Arv ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Arv och subklasser Klasser innehåller attribut och beteenden En subklass ärver dessa från föräldern Detta ger: Återanvänd kod
Läs merSubklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser
Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 5 Innehåll Subklasser och arv Inledning till grafik (JFrame och JPanel).
Läs merTDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning Generiska klasser Undantag Interface Nästlade klasser 1 Problem:
Läs merTentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal
Tentamen DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl 10.00 13.00 Hjälpmedel: penna, suddgummi, linjal Tentan har två delar om vardera 30 poäng Maximala betygsgränser (gränserna
Läs merFöreläsning 2 Objektorienterad programmering DD1332. Typomvandling
metoder Föreläsning 2 Objektorienterad programmering DD1332 Array [modifierare] String metodnamn (String parameter) Returtyp (utdata typ) i detta fall String Indata typ i detta fall String 1 De får man
Läs merObjektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016
Objektorienterad Programkonstruktion Föreläsning 9 30 nov 2016 Collections Ett samlingsnamn på objekt som innehåller en samling av andra objekt Det finns många olika sorters Collections, t.ex listor, träd,
Läs merObjektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)
Objektorienterad Programmering DAT043 Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material) 1 Metoden clone() Skapa kopior av existerande objekt. Interface Cloneable Deep vs.
Läs merTDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014
TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt. Använd
Läs merArrayer. results
Arrayer 85 Arrayer Deklarerar utrymme för många variabler i en enda deklaration Array (fält) Varje värde har ett numeriskt index i Java indexeras en array med N element med indexen till N-1 Exempel: 1
Läs merArv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).
3 Arv och gränssnitt 3.1 Vad innebär arv? Ett objektorienterat språk bygger på att programmeraren ges möjligheten att modellera verkligheten med hjälp av objekt. Objekt låter sig definieras i form av klasser.
Läs mer2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning
2I1049 Föreläsning 5 Objektorienterad programmering i Java KTH-MI Peter Mozelius Objektorientering Världar uppbyggda av objekt Inte helt olikt vår egen värld Ett sätt att modularisera våra system Objekten
Läs merSammanfattning och Tentamensinfo Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018
Sammanfattning och Tentamensinfo Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Den här veckan Måndag: Retrospektiv övning, övning på gamla tentauppgifter Tisdag (idag): Retrospektiv
Läs merArv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }
En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class
Läs merInnehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och
Innehåll u OOP snabbintroduktion u Datatyper u Uttryck u Satser u Arv (intro) u Programvaruutveckling och programmering u Klassdesign och metodik (UML, CRC) u Arv, polymorfi och dynamisk bindning u Fält
Läs merIdag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.
Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett
Läs merUML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.
Översikt UML Sekvensdiagram (dynamic structure) Informationsflöde genom programmet Användningsfall (use cases) Aktörers interaktion med systemet Paketdiagram Beroenden mellan paket abstrakta klasser Multipel
Läs merSeparation of Concern. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Johannes Åman Pohjola, 2017
Separation of Concern Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Johannes Åman Pohjola, 2017 Modulär design Ett programsystem är för stort för att kunna förstås i sin helhet.
Läs merVälkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA
Välkommen till Datastrukturer, algoritmer och programkonstruktion eller DOA Jag: Christer Labbassar: Caroline: Johan: Agenda, före lunch Inledning om DOA-kursen Backspegel Mål Syfte Examination Om lärande
Läs merF9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander
F9 - Polymorfism ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Polymorfism - flerformighet Vi vet vad metoden heter (signaturen) Men vi vet inte vid anropet exakt vilken metod som faktiskt
Läs merObjektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo
Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till
Läs merDesign Patterns Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017
Design Patterns Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017 Vad är ett design pattern? Ett design pattern (designmönster) är en (ofta namngiven) generell lösning av en vanligt
Läs merKlassdeklaration. Metoddeklaration. Parameteröverföring
Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar
Läs merDesign Patterns. Objekt-orienterad programmering och design Alex Gerdes, 2018
Design Patterns Objekt-orienterad programmering och design Alex Gerdes, 2018 Vad är ett design pattern? Ett design pattern (designmönster) är en (ofta namngiven) generell lösning av en vanligt återkommande
Läs merAbstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.
-Algoritmer och Datastrukturer- Abstrakt datatyp Datatyp för en variabel Betecknar i ett programmeringsspråk den mängd värden variabeln får anta. T ex kan en variabel av typ boolean anta värdena true och
Läs merObjektorienterad programmering
Objektorienterad programmering Emil Ahlqvist (c10eat@cs.umu.se) Didrik Püschel (dv11dpl@cs.umu.se) Johan Hammarström (c08jhm@cs.umu.se) Hannes Frimmel Moström (c10hml@cs.umu.se) 1 1. Introduktion 1.1 Objektorienterad
Läs merObjektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016
Objektorienterad Programkonstruktion Föreläsning 2 2 nov 2016 Objekt - klass Namn Fält1 Fält2 Fält3 Metod1 Metod2 Metod3 Metod4 Objekt - klass Objekt - klass Objekt - klass + Objekt - klass public class
Läs merFöreläsning 3: Booleans, if, switch
TDA 545: Objektorienterad programmering Föreläsning 3: Booleans, if, switch Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Påminnelse om klasser och objekt Boll boll1 = new Boll(5,12); skapar ett nytt
Läs merObjektorienterad Programkonstruktion
Objektorienterad Programkonstruktion Föreläsning 9 Projektuppgift Collection, Iterator, Composite Christian Smith ccs@kth.se 1 Projektuppgift IM, skickar meddelanden mellan datorer En lite större labbuppgift,
Läs merKungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h
Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h Antalet uppgifter : 2 (20p + 20p = 40 p) ) Lärare, jourhavande lärare :
Läs merTENTAMEN I DATAVETENSKAP
Umeå Universitet Datavetenskap Marie Nordström Thomas Johansson Jürgen Börstler 030124 TENTAMEN I DATAVETENSKAP PROGRAMMERINGSMETODIK OCH PROGRAMMERING I JAVA, 5P. (TDBA63) Datum : 030124 Tid : 9-15 Hjälpmedel
Läs merFöreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser
Föreläsning 8 Arv och abstrakta klasser Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen (extends) Den nya klassen behåller alla egenskaper som den gamla
Läs merRepetition av OOP- och Javabegrepp
ArrayList Repetition av OOP- och Javabegrepp En lista i vilken man kan lagra objekt Implementerar List-interfacet Skiljer sig från ett vanligt endimensionellt fält: Dynamisk expanderar när den blir
Läs merVad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes
Vad kännetecknar en god klass F12 Nested & En odelad, väldefinierad abstraktion Uppgiften kan beskrivas kort och tydlig Namnet är en substantiv eller adjektiv som beskriver abstraktionen på ett adekvat
Läs merRepetition av OOP- och Javabegrepp
ArrayList Repetition av OOP- och Javabegrepp En lista i vilken man kan lagra objekt Implementerar List-interfacet Skiljer sig från ett vanligt endimensionellt fält: Dynamisk expanderar när den blir
Läs merKlasshierarkier - repetition
Klasshierarkier - repetition Klasser kan byggas på redan denierade klasser, egna och/eller färdigskrivna, genom: I att klassobjekt används som attribut (instansvariabler): har-relation. Exempel: traksystemet
Läs merObjekt-orienterad Programmering och Design. TDA552 Alex Gerdes, HT-2018
Objekt-orienterad Programmering och Design TDA552 Alex Gerdes, HT-2018 Kursteamet Dr. Alex Gerdes examinator och föreläsare (Dr. Niklas Broberg föreläsare) Handledare: Sólrún Halla Einarsdóttir Yazan Ghafir
Läs merOmtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:
Omtentamen för TDA540 Objektorienterad Programmering Institutionen för Datavetenskap CTH HT-17, TDA540 Dag: 2018-04-06, Tid: 14.00-18.00 Ansvarig: Examinator: Alex Gerdes Carlo A. Furia Förfrågningar:
Läs merTDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12
TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 215, kl 8 12 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.
Läs merI STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else
Förkunskaper från tidigare föreläsningar: Objektorienterad Programmering (TDDC77) Föreläsning IX: Klasser och Objekt, Instantiering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2015 I STONE I Variabler,
Läs merLaboration 2: Designmönster
Laboration 2: Designmönster Bakgrund Det har visat sig väldigt svårt att beskriva hur ett system, eller en dellösning, skall konstrueras på ett bra sätt. Det har överhuvud taget varit svårt att veta om
Läs merInnehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer
Innehåll EDAF30 Programmering i C++ 8. Klasser; resurshantering och polymorfism Sven Gestegård Robertz Datavetenskap, LTH 2016 1 Klasser 2 Operatorer 3 Klasser, resurshantering Rule of three Move semantics
Läs merTentamen. DD2385 Programutvecklingsteknik vt 2015 Fredagen den 5 juni 2015 kl Hjälpmedel: penna, suddgummi, linjal
Tentamen DD2385 Programutvecklingsteknik vt 2015 Fredagen den 5 juni 2015 kl 9.00 12.00 Hjälpmedel: penna, suddgummi, linjal Tentan har två delar om vardera 30 poäng Maximala betygsgränser (gränserna kan
Läs merTentamen i Objektorienterad modellering och design Helsingborg
Lunds Tekniska Högskola Datavetenskap Emelie Engström Tentamen EDAF25 2016 10-26, 08:00 13:00 Tentamen i Objektorienterad modellering och design Helsingborg Tentamen består av en teoridel om totalt 5 poäng
Läs merOutline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine
Objektorienterad Programmering (TDDC77) Föreläsning XI: åsidosättning, gränssnitt, uppräkning, hierarkier Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Klassen calculator Signatur Calculator
Läs merInkapsling (encapsulation)
UML UML är en standard för att dokumentera och visualisera sina tankar och beslut under analys och design. Att lära sig allt om UML får inte plats i den här kursen, men vi kommer lära oss vissa delar.
Läs merTentamen ID1004 Objektorienterad programmering October 29, 2013
Tentamen för ID1004 Objektorienterad programmering (vilande kurs), 29 oktober 2013, 9-13 Denna tentamen examinerar 3.5 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av tre sektioner.
Läs merOOP Objekt-orienterad programmering
OOP F10:1 OOP Objekt-orienterad programmering Föreläsning 10 Mer om arv och klasshierarkier Interface Hierarkier - många nivåer OOP F10:2 Djur Rovdjur Hovdjur Fåglar Fiskar Björn Kattdjur Ko Lamm Hjort
Läs merRekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254
Rekursion Rekursion är en grundläggande programmeringsteknik M h a rekursion kan vissa problem lösas på ett mycket elegant sätt Avsnitt 11 i kursboken: Att tänka rekursivt Att programmera rekursivt i Java
Läs merTentamen, Algoritmer och datastrukturer
UNDS TEKNISKA ÖGSKOA (6) Institutionen för datavetenskap Tentamen, Algoritmer och datastrukturer 23 8 29, 8. 3. Anvisningar: Denna tentamen består av fem uppgifter. Totalt är skrivningen på 36 poäng och
Läs merDagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?
Programmeringsteknik och Matlab Övning 4 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312
Läs merObjekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016
Objekt-orienterad Programmering och Design TDA551 Alex Gerdes, HT-2016 Kursteamet Dr. Alex Gerdes kursansvarig, föreläsare Dr. Niklas Broberg examinator, (föreläsare) Fredrik Sjöholm handledare Johan Andersson
Läs merFö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 5-6 Innehåll Exempel på program med objekt Skapa och använda objekt Skriva egna klasser public class DrawSquare { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600,
Läs merSätt att skriva ut binärträd
Tilpro Övning 3 På programmet idag: Genomgång av Hemtalet samt rättning Begreppet Stabil sortering Hur man kodar olika sorteringsvilkor Inkapsling av data Länkade listor Användning av stackar och köer
Läs merObjektorienterad Programmering (TDDC77)
Objektorienterad Programmering (TDDC77) Föreläsning XI: åsidosättning, gränssnitt, uppräkning, hierarkier Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Outline Överlagring (overloading) Arv
Läs merObserver Pattern och MVC. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017
Observer Pattern och MVC Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017 Model View Controller Model View Controller (MVC) är ett design pattern (architectural pattern) som är
Läs merGrundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14
Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 14 I torsdags & fredags: arrayer Deklaration, initiering, åtkomst Arrayer är referenser Arrayer som parametrar och returvärden Exempel
Läs merFöreläsning 13 Innehåll
Föreläsning 13 Innehåll Arv Repetition Om tentamen Datavetenskap (LTH) Föreläsning 13 HT 2017 1 / 32 Diskutera Här är början på klassen MemoryWindow som använts på en lab. Vad kan menas med extends SimpleWindow?
Läs mer