JUnit. Ska kompletteras med kodexempel på JUnit. DD2385 Programutvecklingsteknik Några bilder till föreläsning 12 21/5 2012

Relevanta dokument
Kursombud. Objektorienterad modellering och diskreta strukturer / design. Agile? Designprinciper EDAF10 EDA061. Lennart Andersson. Grupper för projekt

HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN)

UML Objektdiagram. Objektorienterad modellering och design (EDAF25) Föreläsning 3. UML Sekvensdiagram. UML Objektdiagram. Agenda

Föreläsning 5. När skall man använda implementationsarv? När skall man använda implementationsarv?

Sammanfattning och Tentamensinfo Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

UML Objektdiagram. Objektorienterad modellering och design (EDAF25) Föreläsning 3. UML Sekvensdiagram. UML Objektdiagram. Agenda

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

SOLID är en akronym för fem stycken designprinciper som används vid mjukvaruutveckling. SOLID står för:

Seminarierna Instruktioner. Övningarna Viktiga relationer

Principles of subclasses Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Dependencies High cohesion, low coupling. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Generics och polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

HT1 2015, FÖRELÄSNING 14 (INFÖR TENTAN)

Objekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016

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

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

Föreläsning 5. När skall implementationsarv användas? The Open-Closed Principle (OCP) Liskov Substitution Principle (LSP)

TDDC76 - Programmering och Datastrukturer

Lösningar till tentamen i EDAF25

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

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

SMD091 Lektion 9. Definition. Inkapsling. Lite repetition. Grafik. Gränssnitt Definition och Implementation. Sammansättning... Implementation.

Undantag, Sammanfattning och Tentamensinfo. Objekt-orienterad programmering och design Alex Gerdes, 2016

Dependencies High cohesion, low coupling. Objekt-orienterad programmering och design Alex Gerdes, 2018

Separation of Concern. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

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

Objekt-orienterad programmering och design. DIT953 Niklas Broberg, 2018

Föreläsning 5. När skall man använda implementationsarv?

Instuderingsuppgifter läsvecka 2

Objekt-orienterad Programmering och Design. TDA552 Alex Gerdes, HT-2018

Principles of subclasses. Objekt-orienterad programmering och design Alex Gerdes, 2018

HT1 2015, FÖRELÄSNING

Exempel på användning av arv: Geometriska figurer

Tentamen i Objektorienterad modellering och design Helsingborg

Design Patterns. Objekt-orienterad programmering och design Alex Gerdes, 2016

Separation of Concern. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Johannes Åman Pohjola, 2017

Svaret kan ges i Javakod (eller i UML-klassdiagram). public class A { B minb;... } public class B { <B:s många variabler och metoder> } Lösning:

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

Design Patterns. Objekt-orienterad programmering och design Alex Gerdes, 2018

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

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

Principer, Pa+erns och Tekniker. Objekt-orienterad programmering och design Alex Gerdes, 2018

Design Patterns Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

Principer, Patterns och Tekniker. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Principer, Patterns och Tekniker. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Lösningar till tentamen i EDAF25

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

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

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

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

Tentamen. DD2385 Programutvecklingsteknik vt Tisdagen den 26 maj 2009 kl Inga hjälpmedel utom penna, sudd och linjal

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen. DD2385 Programutvecklingsteknik vt 2015 Fredagen den 5 juni 2015 kl Hjälpmedel: penna, suddgummi, linjal

Objektorienterad Programmering (TDDC77)

Lösningsförslag. 1 Lösningsförslag. Uppgift 1

OOMPA 2D1359 Föreläsning 8

Tentamen i Objektorienterad modellering och design

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

Objektorienterad programutveckling, fk

Lösningsförslag till tentamen

Modulär design. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

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

Föreläsning 13 Innehåll

Institutionen för datavetenskap HT /2008. Testning med JUnit

Föreläsningsbilder EDAF10/EDA061 Ht 2015 HT1 2015, FÖRELÄSNING 3

Design by Contract, Exceptions. Objekt-orienterad programmering och design (DIT953) Johannes Åman Pohjola, 2018

Återanvändning. Två mekanismer. Nedärvning av egenskaper (inheritance) Objekt komposition

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

Tentamen. DD2385 Programutvecklingsteknik vt Tisdag 7 juni 2016 kl

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

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

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

Begreppet subtyp/supertyp i Java. Mera om generik. Generik och arv. Generik och arv. Innehåll

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

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

Lösningsförslag till tentamen i EDAF25 Objektorienterad modellering och design Helsingborg

Computer projekttid. Objektorienterad modellering och diskreta strukturer / design. Rapporter från verkligheten. EDAF10 i HT2

Tentamen i Objektorienterad modellering och design Helsingborg

Institutionen för TENTAMEN CTH HT-13 Datavetenskap TDA550 DAG: TID: 8:30 12:30

Modulär design Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

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

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

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

LÖSNINGSFÖRSLAG. Tentamen. Objektorienterad modellering och design. EDA665, 4 poäng

Arv Murach s: kap 14

Tentamen i Objektorienterad modellering och design Helsingborg

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

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

Viktiga programmeringsbegrepp: Kontrakt

Tentamen Programmering fortsättningskurs DIT950

4.7 Observatörsmönstret

Arv och polymorfism i Java

Design by Contract, Exceptions, Initialisering. Objekt-orienterad programmering och design (DIT952) Johannes Åman Pohjola, 2017

TENTAMEN: Objektorienterad programutveckling, fk. Läs detta! Uppgifterna är inte ordnade efter svårighetsgrad.

ID1004 Laboration 3, 5-6 November 2012

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

Transkript:

DD2385 Programutvecklingsteknik Några bilder till föreläsning 12 21/5 2012 Innehåll Testning med JUnit Refactoring Några designprinciper JUnit Ramverk i Java för testning av Java-klasser Utvecklat av Gamma & Beck, första versionen kom 2002 TestCase = Javaklass för enkelt testfall TestSuite = Javaklass för ett antal testfall och/eller testsviter enligt mönstret Composite Textgränssnitt eller grafiskt Enkelt att använda Gratis på www.junit.org Ska kompletteras med kodexempel på JUnit.

Refactoring Förbättra programkoden Minskad kodupprepning Ökad flexibilitet Tydligare Effektivare Utsidan /gränssnitt mot användare ändras ej Funktionaliteten ändras ej Svårt Några enkla exempel visas Refactoring - kodupprepning inom klass c l a s s C { void m1( ) { <A> do1 ( ) ; do2 ( ) ; do3 ( ) ; <B> void m2( ) { <C> do1 ( ) ; do2 ( ) ; do3 ( ) ; <D> förbättras till c l a s s C { void d o A l l { do1 ( ) ; do2 ( ) ; do3 ( ) ; void m1( ) { <A> d o A l l ( ) ; <B> void m2( ) { <C> d o A l l ( ) ; <D> Refactoring - kodupprepning i olika klasser c l a s s A { void m1( ) { <A> do1 ( ) ; do2 ( ) ; do3 ( ) ; <B> c l a s s B { void m2( ) { <C> do1 ( ) ; do2 ( ) ; do3 ( ) ; <D> förbättras genom arv eller delegering Arv c l a s s C { void d o A l l { do1 ( ) ; do2 ( ) ; do3 ( ) ; c l a s s A extends C { void m1( ) { <A> d o A l l ( ) ; <B> c l a s s B extends C { void m2( ) { <C> d o A l l ( ) ; <D>

Delegering c l a s s H e l p e r { void d o A l l ( ) { do1 ( ) ; do2 ( ) ; do3 ( ) ; c l a s s A { H e l p e r h e l p e r = new H e l p e r ( ) ; void m1( ) {<A> h e l p e r. d o A l l ( ) ; <B>.. c l a s s B { H e l p e r h e l p e r = new H e l p e r ( ) ; void m2( ) {<B> h e l p e r. d o A l l ( ) ; <D>.. c l a s s A { void m( ) { <common 1> <A spec> <common 2> c l a s s B { void m( ) { <common 1> <B spec> <common 2> Kodupprepning igen Kodupprepning igen, forts. c l a s s C { void specm ( ) { ; // tom e l l e r void m( ) { // a b s t r a k t <common 1> specm ( ) ; <common 2> c l a s s A extends C { // V i l k e t d e s i g n p a t t e r n void specm ( ) { // a r d e t t a? <A spec> c l a s s B extends C { void specm ( ) { <B spec> Några designprinciper SRP Single Responsibility Principle OCP Open-Closed Principle DIP Dependency Inversion Principle ISP Interface Segregation Principle LSP Liskov Substitution Principle

SRP Single Responsibility Principle Lätt att säga men svårt att göra A class has a single responsibility: It does it all, does it well and does it only [Bertrand Meyer] Kan klassen beskrivas med högst 25 ord, utan och eller eller? Olika ansvarsområden karakteriseras av olika skäl till förändring. En klass ska ha endast en förändringsaxel OCP Open Closed Principle A class should be closed for modification but open for extension Klientklass använder interface. Implementerande klasser står för utvidgningarna. Basklass definierar metoder. Subklass utvidgar genom att definiera om metoder definiera nya metoder DIP Dependency Inversion Principle High-level modules should not depend on low-level modules. Both should depend on abstractions. Abstraction should not depend on detail. Details should depend on abstractions. Exempel på DIP void r e g u l a t e ( double mintemp, double maxtemp) { f o r ( ; ; ) { while ( i n (THERMO) > mintemp ) w a i t ( 1 ) ; out (HEATER, ENGAGE ) ; while ( i n (THERMO) < maxtemp) w a i t ( 1 ) ; out (HEATER, DISENGAGE ) ; Termostaten beror av lågnivåmodulerna termometer och värmare

Bättre struktur void r e g u l a t e ( Thermometer t, Heater h, double mintemp, double maxtemp) { f o r ( ; ; ) { while ( t. read ( ) > mintemp ) w a i t ( 1 ) ; h. engage ( ) ; while ( t. read ( ) < maxtemp) w a i t ( 1 ) ; h. d i s e n g a g e ( ) ; ISP Interface Segregation Principle Clients should not be forced to depend on methods they do not use Här beror högnivåmodulen (regulate) och lågnivåmodulerna (termometer, värmare) på abstraktioner. LSP Liskov Substitution Principle Subtypes must be substitutable for their base types Ett objekt av en subklass ska kunna användas där objekt av basklassen/superklassen används LSP motiveras med ett exempel

Rectangle Shape Ellipse Circle Triangle p u b l i c c l a s s R e c t a n g l e extends Shape { p r i v a t e i n t width, h e i g h t ; p u b l i c void setwidth ( i n t w) { width = w; p u b l i c void s e t H e i g h t ( i n t h ) { h e i g h t = h ; p u b l i c i n t getwidth ( ) { return width ; p u b l i c i n t g e t H e i g h t ( ) { return h e i g h t ; p u b l i c i n t a r e a ( ) { return width h e i g h t ; Rectangle Shape Ellipse Triangle ärver från Rectangle, där width == height public c l a s s extends R e c t a n g l e { public void setwidth ( i n t w) { super. setwidth (w ) ; super. s e t H e i g h t (w ) ; public void s e t H e i g h t ( i n t h ) { super. s e t H e i g h t ( h ) ; super. setwidth ( h ) ; Circle Lite slösaktigt att alla kvadrater har ett extra datafält!

Ett testprogram c l a s s Test { s t a t i c void t e s t ( R e c t a n g l e r ) { r. setwidth ( 4 ) ; r. s e t H e i g h t ( 5 ) ; System. out. p r i n t l n ( Area i s + r. a r e a ( ) + s h o u l d be 20 ) ; public s t a t i c void main ( S t r i n g [ ] a ) t e s t (new R e c t a n g l e ( ) ) ; t e s t (new ( ) ) ; Utskrift från Test blir Area is 20 should be 20 Area is 25 should be 20 LSP Liskov Substitution Principle Subtypes must be substitutable for their base types Ett objekt av en subklass ska kunna användas där objekt av basklassen/superklassen används & Rectangle bryter mot LSP eftersom inte kan ersätta Rectangle i exemplet. Vad betyder relationen är en? Shape En är en Rectangle Men en uppför sig inte som en Rectangle!!! En Rectangle har egenskapen att width och height kan ges värden oberoende av varandra. Rectangle Circle Triangle Bryt mot LSP endast vid signifikant vinst! Exempel? Ellipse

Shape RectangularObject RectangularObject Rectangle RoundedObject Ellipse Triangle abstract c l a s s R e c t a n g u l a r O b j e c t extends Shape { abstract i n t a r e a ( ) ; abstract i n t width ( ) ; abstract i n t h e i g h t ( ) ; Circle Rectangle c l a s s R e c t a n g l e extends R e c t a n g u l a r O b j e c t { i n t width, h e i g h t ; void setwidth ( i n t w) { width = w; void s e t H e i g h t ( i n t h ) { h e i g h t = h ; i n t width ( ) { return width ; i n t h e i g h t ( ) { return h e i g h t ; i n t a r e a ( ) { return width h e i g h t ; c l a s s extends R e c t a n g u l a r O b j e c t { i n t s i z e ; void s e t S i z e ( i n t s ) { s i z e = s ; i n t width ( ) { return s i z e ; i n t h e i g h t ( ) { return s i z e ; i n t a r e a ( ) { return s i z e s i z e ;