TDP024. Informationssökning Datalayer JPA - Facade, Logging, Testing. Enterprise Systems. Anders Fröberg Institutionen för Datavetenskap (IDA)

Storlek: px
Starta visningen från sidan:

Download "TDP024. Informationssökning Datalayer JPA - Facade, Logging, Testing. Enterprise Systems. Anders Fröberg Institutionen för Datavetenskap (IDA)"

Transkript

1 TDP024 Enterprise Systems Informationssökning Datalayer JPA - Facade, Logging, Testing Anders Fröberg Institutionen för Datavetenskap (IDA) 1

2 Agenda Skrivuppgiften Programming to an interface JPA 2

3 TDP024 IN A NUTSHELL I examensordningen står det att för alla kandidatexamina skall bland andra följande mål uppnås: (Även andra examina än kandidatexamina har nästan identiska mål) 1.visa förmåga att söka, samla, värdera och kritiskt tolka relevant information i en problemställning samt att kritiskt diskutera företeelser, frågeställningar och situationer 2.visa sådan färdighet som fordras för att självständigt arbeta inom det område som utbildningen avser 3.visa förmåga att självständigt identifiera, formulera och lösa problem samt att genomföra uppgifter inom givna tidsramar 4.visa förmåga att muntligt och skriftligt redogöra för och diskutera information, problem och lösningar i dialog med olika grupper 3 3

4 TDP024 Informationssökning Visa förmåga att söka, samla, värdera och kritiskt tolka relevant information i en problemställning samt att kritiskt diskutera företeelser, frågeställningar och situationer Individuell rapport och seminarier 1Hp Sök och välj ut tre bra forskningsartiklarna relaterade till kursens innehåll. Skriv en sammanfattning och analys av alla tre artiklarna på en A4-sida vardera. Värdera varje artikel - Varför är den bra 4 4

5 Uppgift Individuell rapport och seminarie 1Hp Denna uppgift går ut på att genomföra en fördjupning i aktuell forskning inom kursens områden samt träna på att utvärdera vetenskaplig litteratur. Samt diskutera innehållet av de ni läst på ett seminarie med de andra studenterna. Sök och välj ut tre bra forskningsartiklarna relaterade till kursens innehåll. Skriv en sammanfattning och analys av alla tre artiklarna på en A4-sida vardera. Som språk kan antingen svenska eller engelska använda. Sammanfattningen/analysen ska utförligt besvara följande frågor: Vad är artikelns syfte? Hur har det presenterade arbetet lagts upp (tillvägagångssätt/metod)? Vilka resultat kommer artikeln fram till? Vad finns det för begränsningar i arbetet? Avsluta varje analys med att redogöra varför artikel är en bra artikel. 5

6 Hitta

7 Vad gör en artikel bra? Vem Hur många artiklar Erkänd inom området Var Tidskrift eller Konferensbidrag (ev Workshop) Ranking och Impact Factor ( isi_listed_se_journals.html) Vilka andra Hur många andra har citerat artikeln 7

8 TDP024 Enterprise Systems Program to an Interface och Dependency Injection Anders Fröberg Institutionen för Datavetenskap (IDA)

9 Program to an interface Program to an interface är en metod att organisera och bygga sitt system på som är grundläggande för alla system som skall vara modulära och hållbara. För en programmerare är det bland de viktigaste kunskaper man kan ta med sig in i ett projekt. Projekt som väljer enklare metoder, eller hittar genvägar runt, har en drastiskt förkortad livslängd. Det är på abstraktionsnivån programmering som denna metod befinner sig, inte på samma abstraktionsnivå som SCRUM eller arkitektur, etc. 9 2

10 Program to an interface I den här kursen är det omöjligt att klara laborationerna utan att ha förståelse för program to an interface. Eventuella avvikelser från metoden i laborationerna kommer ge komplettering. I arbetslivet är det en självklarhet att man har denna kunskap med sig, och deltar man i ett projekt som inte använder sig av program to an interface ska man kämpa för att de börjar med det. 10 3

11 Program to an interface I den korthet: här kursen är det omöjligt att klara laborationerna Systemet man bygger utan att skall ha förståelse knytas samman för program och bero to på an interface. kontrakt mellan olika delar. Eventuella Det skall inte avvikelser bero på från en viss metoden implementation. i laborationerna kommer ge komplettering. T ex. ett system skall vara beroende på sorterar en lista, inte på bubble sort. I Att arbetslivet sortera en är det lista en är ett självklarhet kontrakt, jag att säger man till har ett denna annat system kunskap sortera med sig, denna och deltar lista och man får i ett tillbaka projekt en som inte sorterad använder lista. Det sig av spelar program dock inte mig to an någon interface roll hur ska detta man gick kämpa till, jag för har att skrivit de börjar kod som med jobbar det. mot kontraktet inte mot en viss implementation av kontraktet

12 Program to an interface public interface Sort { List sort(list list); public class BubbleSort implements Sort { public List sort(list list) { //Do bubble sort När jag skriver kod så jobbar jag mot interfacet, jag vet att alla klasser som uppfyller kontraktet kommer ha en funktion som heter sort och tar en lista och returnerar en lista. public class QuickSort implements Sort { public List sort(list list) { //Do quick sort 12 5

13 Program to an interface public interface Sort { List sort(list list); När någon sedan kommer fram till en snabbare sorteringsalgoritm så behöver jag inte ändra i min kod, för den är skriven mot ett kontrakt, inte mot en implementation. public class BubbleSort implements Sort { public List sort(list list) { //Do bubble sort public class QuickSort implements Sort { public List sort(list list) { //Do quick sort public class QuantSort implements Sort { public List sort(list list) { //Do quick sort 13 6

14 Program to an interface public class ListUtils { private Sort sort; Interface, det står inte: private BubbleSort sort; public List findsmallest(list list) { list = sort.sort(list); return list.get(0); Använder en metod som jag vet finns enligt kontraktet, oavsett vilken implementation jag använder. That s a null pointer exception! 14 7

15 Dependency Injection public class ListUtils { private Sort sort; public ListUtils(Sort sort) { this.sort = sort; ListUtils väljer inte vilken implementation den skall använda. I sin konstruktor så accepterar den en instans av en implementation. (Notera att vi fortfarande endast använder interfaces). public List findsmallest(list list) { list = sort.sort(list); return list.get(0); Detta kallar vi dependency injection det består alltså av en klass som har en instansvariabel som blir satt i konstruktorn. 15 8

16 Dependency Injection public static void main(string [] args) { ListUtil listutil = new ListUtil(new QuickSort()); int min = listutil.findsmallest([21,13,55,34]) Någon gång måste man välja implementation, i detta fall är det koden som skapar ett nytt objekt av ListUtil som måste välja vilken implementation som skall användas. För den intresserade så går det även att få bort detta beroende. Med hjälp av Inversion of Control kan man få program to an interface on steroids. Du anger aldrig vilken implementation som skall användas i koden, utan detta löses runtime från t ex en XML fil som säger vilken implementation av Sort som skall användas just nu. 9 Vi har inte tid med Inversion of Control i denna kurs, men det rekommenderas till den intresserade. 16

17 Program to an interface Enhetstestning drar också stora fördelar från att fokusera på kontrakt snarare än implementation. Test the contract, not the implementation Om vi skriver våra test mot kontrakt så kan vi testa oändligt många implementationer av samma kontrakt. Om någon kommer och påstår att de har en ny implementation som är bättre, så kan man testa implementationen mot redan existerande tester

18 Program to an interface public class Test { //--- Unit under test ---// private Sort sort = new BubbleSort(); // // Koden i testet är oberoende av implementationen. Innan vi kör testet kan vi byta implementation. public void test() { List a = [4,3,5,2,6]; List b = sort.sort(a); Assert.assertTrue(b[0] == 2); Om någon kommer och påstår att de har en bättre implementation, så tar vi deras kod och instansierar deras lösning istället. Testen är exakt desamma

19 Data Logic - Web Logik Data och Logik teamen sitter tillsammans och kommer överens om ett API (dvs ett kontrakt) för vilka funktioner som kommer behövas från datalagret. Som en del av detta arbete så skrivs också alla tester, dvs alla tester som måste vara uppfyllda för att logik teamet skall känna sig trygga i att använda data lagret. Data API Tests 19 12

20 Data Logic - Web Logik Data API API Tests Tests Data teamet tar sin kopia av kontrakt och tester och börjar sedan implementera. De är helt oberoende av alla andra delar av projektet. Och resten av projektet är helt oberoende av deras implementationsdetaljer

21 Logik Data Logic - Web Web API Data Tests API Tests Web och logik teamen gör precis samma sak. De kommer överens om ett kontrakt för kommunikation mellan web och logiklagret. I denna process skrivs även tester. API Tests 21 14

22 Data Logic - Web API Data Logik Tests Web API Tests API Tests Data Nu har logik lagret ett kontrakt som de vet kommer bli uppfyllt (samt tester). Och de har ett kontrakt som de skall uppfylla (samt tester)

23 Web Data Logic - Web API Data API Tests Tests Logik 16 Logiklagret kan skriva all sin kod så att den uppfyller kontraktet mot web. Eftersom logiklagret ALLTID jobbar mot kontraktet så behöver man inte vänta på en implementation från datalagret. API Tests Men hur kan man testa sin logik utan att kunna skapa instanser av de kontrakt som data lagret ska leverera? Måste man vänta på att data lagret blir klara? 23 Data

24 Web Data Logic - Web API Data API Tests Tests Logik API Tests Data Just fake it! Logik lagret har ju kontrakten från data lagret, de kan skapa sitt egna lilla fejk datalager som de kan använda för att testa med. 17 Detta kallas ofta mocking eller creating mock objects 24

25 Mock objects - Mocking public class Test { //--- Unit under test ---// private Sort sort = new Sort() { public List sort(list sort) { return [2]; // // public void test() { List a = [4,3,5,2,6]; List b = sort.sort(a); Assert.assertTrue(b[0] == 2); Så vi skapar en egen implementation av Sort (till dess att data lagret är klara med sin) som vi kan testa med. Den behöver inte vara bra, så länge den gör vad den ska. När data lagret sedan är klara så stoppar vi in deras implementation istället

26 Data Logic - Web Web Logik Data Web implementation API Tests Logic implementation API Tests DB implementation När alla delar är på plats så har man ett system som är modulärt och hållbart. De olika implementationerna är endast beroende på kontrakten

27 Data Logic - Web Web Logik Data Web implementation API Tests Logic implementation API Tests DB implementation Om datalagret får för sig att byta sin implementation till t ex. ett system som sparar i en molntjänst istället för på lokal databas, eller vill helt plötsligt börja spara i flat-files, så spelar det ingen roll för de andra. Så länge datalagret lovar att upprätthålla kontraktet och testerna så behöver ingen ändra sin kod. Cloud implementation 27 20

28 Data Logic - Web Även inom data lagret är det smidig att testa nya implementationer (eftersom de redan har tester). Data Antag att ett av biblioteken som data lagret använder uppdateras från 1.0 till 2.0, och mycket har ändrats i den nya versionen. Istället för att börja ändra i sin existerande implementation så skapar man en ny, som är helt baserad på 2.0, men testerna är de samma. När man väl är färdig med implementationen (och den passerar alla tester) så kan man byta ut den gamla utan att någon behöver ändra på sin kod. API Tests DB 1.0 implementation DB 2.0 implementation 28 21

29 Summering av Föreläsning 1 Vi tittade på HSV s examensmål, och fick en överblick av kursdesignen utifrån dessa. Vi definierade: Multi-Tier, SOA, Enterprise Systems, program to an interface och dependency injection. Vi tittade på våra SOA principer: Contract, Abstraction, Autonomy och Stateless Vi tittade på kursens fokus på arkitektur, och tog med oss Bezos kommentar: 2 All service interfaces, without exception, must be designed from the ground up to be externalizable. That is to say, the team must plan and design to be able to expose the interface to developers in the outside world. No exceptions. 29

30 Backend SOA Tjänst Egentligen flera lager Backend DB, DATA, LOGIC, EXPOSURE (WEB) MySQL. MongoDB, LDAP, etc DB DATA$ SOA$ TJänster LOGIC$ EXPOSURE$(WEB)$ 3 Klienter kan vara webbsidor, desktop/mobil applikationer, andra SOA tjänster, ATM, parkeringsautomater etc.. Konsument Konsument 30

31 Motivation & Problem Sparande och förmedling av information är det centrala i våra tjänster Databaser gör det möjligt för oss att spara information på ett säkert och stabilt sätt Data bör komma in och ut ur applikationen på ett naturligt sätt En SQL databas är en samling tabeller med rader och kolumner En Java applikation består utav objekt JPA är ett Java bibliotek (del utav Java EE) som översätter Java klasser till rader och kolumner - ORM (Objekt-Relational-Mapping) 4 31

32 JPA POJO Instanser av klasser annoterade kan sparas till används för att konfigurera kolumnen för ett fält (nullable, unique, etc) Som ett minimum behöver man annotera ett fält för primary-key Egentligen är klassen en POJO (Pure Old Java Objekt) utan några speciella krafter JPA kommer skapa tabeller som anses nödvändiga Kan hantera komplexa relationer mellan klasser och även datatyper så som HashMap och List (med lite konfiguration) 32 5

33 JPA - Entity Exempel Interface public interface Todo { public class TodoDB implements Todo { long getid(); void setid(long id); String private long id; private String title; private String body; void settitle(string public long getid() { return id;

34 JPA Table Example id$6$bigint(20)$ =tle$6$varchar(255)$ content$6$varchar(255)$ 1" Title"1" Content"1" 2" Title"2" Content"2" 3" Title"3" Content"3" " " " " " " Behöver inte fundera på vilka tabeller eller kolumner som bör skapas, detta görs åt mig. Innebär att det är lättare att byta databas den dagen företaget väljer att köpa in t ex Oracle, eller helt byta till t ex MongoDB (som inte består utav rader och kolumner alls) 7 34

35 EntityManager & Transactions Förutom att använda annotations på klasser som skall sparas i databasen så behöver vi kommunicera med databasen. En EntityManager skapas genom klassen EntityManagerFactory EntityManager ansvarar för att skapa, starta och avsluta transactions All kommunikation som skriver till databasen måste ske inom en transaktion Antingen så lyckas alla operationer inom en transaktion eller så misslyckas alla 35 8

36 Transactions Transaktionen öppnar vid t0, och under tiden den är öppen görs ett antal skrivningar till databasen. Så länge allt fungerar som det ska, så skrivs allt data till databasen och vi kommer till t1, där transaktionen stängs Om något går fel inom transaktionen, så görs först en rollback på alla operationer, och transaktionen stängs. Allt är som det var vid t

37 Glöm inte bort EntityManager," En0tyManagerFactory"och"Transac0ons,"vi" återkommer"0ll"dessa"strax! Ett design pattern är ett namn på en konstruktion eller uppsättning klasser som jobbar tillsammans på ett sätt som är användbart för många applikationer. Det ger utvecklare ett vokabulär att kommunicera med istället för att upprepa sig själva hela tiden. Intermezzo FAÇADE DESIGN PATTERN 10 37

38 Intermezzo Façade Design Pattern Har jag glömt något? 38 11

39 Klart! Intermezzo Façade Design Pattern 39 12

40 Intermezzo - Facade Design Pattern En klass vars uppgift det är att abstrahera komplexa delar, och på så vis förenkla interaktionen med systemet I datalagret använder vi façades för att erbjuda funktioner för verben create, remove, update, find Det är viktigt att tänka på att de façades som vi skapar i datalagret skall hantera generiska verb som är lika mellan applikationer, inte saker som är unika för just din tjänst. Vi har även façades i logiklagret som kan hantera andra typer av verb, så som checkin och checkout mer om detta på senare föreläsningar 13 40

41 JPA Façade, EMF, Transactions public class TodoEntityFacadeDB implements TodoEntityFacade public long create(string title, String body) { EntityManager em = EMF.createEntityManager(); em.gettransaction().begin(); Todo todo = new TodoDB(); todo.settitle(title); todo.setbody(body); em.persist(todo); em.gettransaction().commit(); EMF är en klass som man måste skapa själv, det finns en sådan i kodskelettet. Exemplet är inte komplett då vi inte hanterar eventuella fel på ett bra sätt. Mer om detta senare. return todo.getid(); 14 Interface på vänstersidan, implementation på höger! 41

42 JPA - Konfiguration JPA behöver konfigureras för att veta vilka klasser som skall sparas JPA behöver information om var databasen är och hur vi kopplar oss mot den En grundläggande persistence.xml finns i kodskelettet. /src/meta-inf/ persistence.xml src/main/resources/ persistence.xml Vi kommer använda en databas som bara existerar i RAM, så inga ändringar behövs för detta. Finns en hel del andra inställningar som är viktiga, t ex drop-and-create 42 15

43 persistence.xml Lägg till en sådan rad för varje entity. <persistence-unit name="todo-datapu" transaction-type="resource_local"> <provider>org.eclipse.persistence.jpa.persistenceprovider</provider> <class>tdp024.todo.data.db.entity.tododb</class> <shared-cache-mode>none</shared-cache-mode> <validation-mode>none</validation-mode> <properties> <property name="javax.persistence.jdbc.url value="jdbc:derby:memory:datapu_embedded;create= <property name="javax.persistence.jdbc.password" value=""/> <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.embeddeddriver"/ <property name="javax.persistence.jdbc.user" value=""/> <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> </properties> </persistence-unit></persistence> 16 43

44 Motivation & Problem Hur vet man att façaden är klar och kan användas av logiklagret? Om man ändrar i sin façade i efterhand, hur vet man att något inte gått sönder? Hur vet man att det inte finns några buggar i sin façade? 44 17

45 JPA - JUnit 18 Viktigt att enhetstesta sin façade med Junit Test your interface, not your implementation Under utvecklingen skriver man först test för de funktioner man tror sin façade kommer behöva, sedan skriver man själva funktionerna När alla testen kör så vet man att façaden är klar och fungerar Test Driven Development (TDD) är en del av extreme Programming De viktigaste fördelarna är: Systemet är testat och fungerar som tänkt. Endast de funktioner man behöver har utvecklats, dvs lösningen är inte overengineered. Det går snabbt att kontrollera att ändringar i systemet inte har ändrat funktionaliteten (recession testing) 45

46 JPA - TDD Realizing quality improvement through test driven development: results and experiences of four industrial teams - Nachiappan Nagappan & E. Michael Maximilien & Thirumalesh Bhat & Laurie Williams - (2008) (From abstract of paper) Case studies were conducted with three development teams at Microsoft and one at IBM that have adopted TDD. The results of the case studies indicate that the pre-release defect density of the four products decreased between 40% and 90% relative to similar projects that did not use the TDD practice. Subjectively, the teams experienced a 15 35% increase in initial development time after adopting TDD

47 JPA JUnit public void test() { TodoFacade todofacade = new TodoFacade(); long id = todofacade.create( Todo 1, Don t forget ); Assert.assertFalse(id == 0); Inte ett komplett exempel, men sådana finns i kodskelet och i föreläsnings kod. Det fina med att skriva testfall på detta sätt är att man kan få ut rapporter på hur många av sina test som gått igenom och att man kan få code-coverage

48 Motivation & Problem 48 21

49 JPA Find & JPQL Vi vill kunna hämta enskilda objekt ur databasen Vi vill hitta dessa via valfri column, t ex id eller title Vi vill också kunna hämta alla objekt tillhörande en klass, eller en filtrerad lista JQPL har ett SQL liknande syntax Skapa ett Query objekt genom EntityManager Sätt parametrar i Query objekt Hämta ett objekt eller en lista 49 22

50 JPA Find & JPQL - Exempel Find by id (@Id) public Todo find(long id) { EntityManager em = EMF.createEntityManager(); Todo todo = em.find(tododb.class, id); return todo; Interface Letar efter en implementation Vi skriver inte till databasen, så vi behöver ingen transaction 50 23

51 JPA Find & JPQL - Exempel Find by title public Todo findbytitle(string title) { EntityManager em = EMF.createEntityManager(); Query query = em.createquery( SELECT t FROM TodoDB t WHERE t.title = :titleparam ); query.setparameter( titleparam, title); return (Todo) query.getsingleresult(); Vi skriver inte till databasen, så vi behöver ingen transaction. Exemplet är inte komplett då vi inte hanterar eventuella fel

52 JPA Find & JPQL - Exempel Find all public List<Todo> findall() { EntityManager em = EMF.createEntityManager(); Query query = em.createquery( SELECT t FROM TodoDB t ); return query.getresultlist(); Vi skriver inte till databasen, så vi behöver ingen transaction. Exemplet är inte komplett då vi inte hanterar eventuella fel

53 Motivation & Problem Anything that can go wrong will go wrong - Murphy s Law Data -> Databas (Nätverk, inkorrekt data, etc) Databas -> Data (Nätverk) Jordbävning i serverhall? Strömavbrott? Moth in relay? 53 26

54 JPA - Exceptions Ibland avbryts exekveringen pga ett fel Servrar kan vara nere, nätverk kan vara otillgängliga Ett logiskt fel, t ex samma för flera konton Att bara hantera felet tyst, utan att tala om att något har gått fel är oftast inte så användbart Vi vill tala om för anropet att något gått fel, men inte krascha systemet Viktigt att hantera olika typer av fel på olika sätt 54 27

55 JPA Exceptions - Exempel public class TodoEntityFacadeDB implements TodoEntityFacade { public long create(string title, String body) throws Exception { if(title == null title.isempty()) { throw new IllegalArgumentException( Title can t be null or empty ); 55 28

56 Återblick Façade, EMF, Transactions public class TodoEntityFacadeDB implements TodoEntityFacade { public long create(string title, String body) { EntityManager em = EMF.createEntityManager(); em.gettransaction().begin(); Todo todo = new TodoDB(); todo.settitle(title); todo.setbody(body); em.persist(todo); em.gettransaction().commit(); return todo.getid(); 56 29

57 JPA Exceptions - Exempel samma kod som tidigare exempel EntityManager em = EMF.createEntityManager(); try { //samma kod som i tidigare men vi stänger inte EntityManager. catch (Exception e) { gör något med felet return 0; finally { if(em.gettransaction().isactive()) { em.gettransaction().rollback(); em.close(); Returnera$0,$då$vet$användaren$a5$ objektet$inte$har$sparats$i$databasen$och$ a5$något$gå5$fel.$ $ finally $körs$allfd,$oavse5$om$fel$har$ uppstå5$eller$inte,$det$ger$oss$möjlighet$ a5$göra$rollbacks$på$transakfonen$och$ stänga$vår$enftymanager$innan$vi$gör$ något$annat.$ $ Vi$F5ar$på$de5a$i$e5$tydligare$exempel$ senare $ 57 30

58 JPA - Logging Att logga alla anrop och fel gör att det blir enklare att hitta buggar när systemet väl är igång Genom att skriva till något persistent, istället för bara System.out, så kan vi gå tillbaka i tiden och även visualisera med HTML eller annat format Loggning kan också ske i form av mejl Men det finns ett problem med den modell vi visat här Vad händer om vår tjänst ligger bakom en loadbalancer och är skalad till 20 servrar? Alla anrop hamnar på olika servrar, så då har vi 20 filer som alla har loggat delar av en användares väg genom systemet 58 31

59 Motivation & Problem 59 32

60 Distribuerad Loggning Istället bör man komplettera sin vanliga loggning med distribuerad loggning Monlog är utvecklat vid Linköpings Universitet av IP studenter under VT2012 T ex en tjänst som tar emot loggmeddelanden och ordnar dessa centralt Uppgifter om hur man använder Monlog finns i laborations beskrivningen Vi använder Monlog för detta Användarnamn, lösenord och API nycklar skickas av kursledningen via mejl 60 33

61 Motivation & Problem 61 34

62 JPA - Mappings id$6$bigint(20)$ =tle$6$varchar(255)$ content$6$varchar(255)$ 1" Title"1" Content"1" 2" Title"2" Content"2" 3" Title"3" Content"3" " " " " " " Vår första Entity skapade en tabell som ovan, den innehåll bara strängar och heltal 62 35

63 Motivation & Problem 63 36

64 JPA - Mappings Komplexa förbindelser, Todo Väldigt viktigt med utförliga testfall för att förstå hur dessa mappings påverkar varandra och databasens uppbyggnad Det finns många inställningsmöjligheter med mappings, och det är ofta viktigt att testa en inställning, titta på hur databasen skapas för detta och ta ett beslut om man vill använda den strukturen Skriv testfall som testar vad som händer om man tar bort, lägger till, uppdaterar objekten i en relation 37 64

65 JPA Mappings exempel public class TodoDB implements Todo { public class CategoryDB implements private long id; private long id; private String title; private String username; private String private Category category, targetentity= TodoDB.class) private List<Todo> todos; 38 65

66 39 66

67 JPA - Concurrency Våra tjänster har inte bara en tråd Räkna med att för varje ny användare skapas en ny tråd, och då ofta en ny EntityManager Vad händer om man försöker köra samma funktion samtidigt, t ex uppdatera en Todo? Pessimistisk: Lås hela raden som skall ändras, ingen annan för röra den tills tråden är klar, lås upp när vi är klara Optimistisk: Hämta objekt och ändra som vanligt, men om objektet har ändrats i databasen när vi försöker skriva så fallerar funktionen 67 40

68 JPA Concurrency Exempel public long update(long id, String title, String body) { Todo todo = em.find(tododb.class, id, LockModeType.PESSIMISTIC_WRITE); För andra varianter av LockModeType kolla länkar under kurslitteratur på hemsidan 41 68

69 JPA Concurrency Klassiskt exempel (OBS: Pseudo kod) function debit(amount) { Account account = findaccount(); if(account.credit >= amount) { account.credit = account.credit amount; persisttodatabase(account); return true; else { return false; Antag att Account bara har 100kr på sitt konto, och vi får in två requests samtidigt med en debitering på 100kr 42 69

70 JPA Concurrency Klassiskt exempel (OBS: Pseudo kod) Tråd 2 väntar. function debit(amount) { Account account = findaccount(); if(account.credit >= amount) { account.credit = account.credit amount; persisttodatabase(account); return true; else { return false; Tråd 1 Antag att Account bara har 100kr på sitt konto, och vi får in två requests samtidigt med en debitering på 100kr 70 43

71 JPA Concurrency Klassiskt exempel (OBS: Pseudo kod) function debit(amount) { CPU n har valt att arbeta med tråd 2, tråd 1 står därmed still. Account account = findaccount(); if(account.credit >= amount) { account.credit = account.credit amount; persisttodatabase(account); return true; else { return false; Tråd 1 Tråd 2 Tråd 2 debiterar och skriver till, databasen. Account har nu 0kr på sitt konto. Antag att Account bara har 100kr på sitt konto, och vi får in två requests samtidigt med en debitering på 100kr 71 44

72 JPA Concurrency Klassiskt exempel (OBS: Pseudo kod) function debit(amount) { Account account = findaccount(); Tråd 2 är klar Tråd 1 har redan kollat att account hade >= 100kr, så den kör på. if(account.credit >= amount) { account.credit = account.credit amount; persisttodatabase(account); return true; else { return false; Tråd 1 När Tråd 1 är klar har vi debiterat, 200 kr från account (som bara hade 100kr) och account.credit == 0 Antag att Account bara har 100kr på sitt konto, och vi får in två requests samtidigt med en debitering på 100kr 45 72

73 46 73

74 JPA - Validering Det finns bibliotek som del av Java EE som löser detta problem. Man kan automatiskt validera , siffor, max o min, godtyckliga strängar etc. Biblioteket kallas Bean Validation. Vi kommer inte att ta på oss problemet med validering i denna kurs, men det är naturligtvis ett viktigt problem i större system

75 Datalayer - DONE DB Problem som hanteras Entity Mapping Validation Del av datalagret Facade JUnit Transaction Query TDD Concurrency Exception Recession Code-Coverage 75 48

76 76

Agenda TDP024 IN A NUTSHELL TDP024. Muddy Card Skrivuppgiften JPA

Agenda TDP024 IN A NUTSHELL TDP024. Muddy Card Skrivuppgiften JPA Agenda TDP024 Enterprise Systems Informationssökning Datalayer JPA - Facade, Logging, Testing Muddy Card Skrivuppgiften JPA Anders Fröberg Institutionen för Datavetenskap (IDA) 1 2 TDP024 IN A NUTSHELL

Läs mer

TDP024. Datalayer JPA - Facade, Logging, Testing. Enterprise Systems. Anders Fröberg Institutionen för Datavetenskap (IDA)

TDP024. Datalayer JPA - Facade, Logging, Testing. Enterprise Systems. Anders Fröberg Institutionen för Datavetenskap (IDA) TDP024 Enterprise Systems Datalayer JPA - Facade, Logging, Testing Anders Fröberg Institutionen för Datavetenskap (IDA) 1 Agenda Kursuppdateringar Muddy Card Skrivuppgiften JPA 2 Kursuppdateringar Datum

Läs mer

TDP024 Enterprise Systems

TDP024 Enterprise Systems TDP024 Enterprise Systems Introduktion, ES, SOA, Multi-Tier Anders Fröberg Institutionen för Datavetenskap (IDA) 2 TDP024 Kursinformation Kurshemsidan innehåller information om laborationerna, seminariet

Läs mer

DB, DATA, LOGIC, EXPOSURE (WEB)

DB, DATA, LOGIC, EXPOSURE (WEB) Backend DB, DATA, LOGIC, EXPOSURE (WEB) MySQL. MongoDB, LDAP, etc DB DATA LOGIC SOA TJänster EXPOSURE (WEB) Klienter kan vara webbsidor, desktop/mobil applikationer, andra SOA tjänster, ATM, parkeringsautomater

Läs mer

TDP024 Enterprise Systems

TDP024 Enterprise Systems TDP024 Enterprise Systems Introduktion, ES, SOA, Multi-Tier Anders Fröberg Institutionen för vetenskap (IDA) 2 TDP024 Kursinformation Kurshemsidan innehåller information om laborationerna, seminariet och

Läs mer

TDP024. Enterprise Systems. Introduktion, ES, SOA, Multi-Tier. Anders Fröberg Institutionen för Datavetenskap (IDA)

TDP024. Enterprise Systems. Introduktion, ES, SOA, Multi-Tier. Anders Fröberg Institutionen för Datavetenskap (IDA) TDP024 Enterprise Systems Introduktion, ES, SOA, Multi-Tier Anders Fröberg Institutionen för Datavetenskap (IDA) Load up your guns, and bring your friends This is the end the only end my Friend Äntligen

Läs mer

TDP024 Enterprise Systems

TDP024 Enterprise Systems TDP024 Enterprise Systems Load up your guns, and bring your friends This is the end the only end my Friend Äntligen stod prästen i predikstolen I ll be back Introduktion, ES, SOA, Multi-Tier Anders Fröberg

Läs mer

TDDE10 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 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 mer

TDDC30. 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 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 mer

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

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Interface Generiska klasser Undantag

Läs mer

Översikt. Installation av EasyPHP 1. Ladda ner från http://www.easyphp.org/ Jag använder Release 5.3.4.0 2. Installera EasyPHP.

Översikt. Installation av EasyPHP 1. Ladda ner från http://www.easyphp.org/ Jag använder Release 5.3.4.0 2. Installera EasyPHP. Laboration 1 Översikt 1. Att komma igång med laborationsmiljön a. installera Aptana Studio 3 b. Installera EasyPHP 2. Testa lite programmering a. Testa enkla uppgifter b. Testa automatiskt 3. Skapa inloggningsformulär

Läs mer

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Kursinformation Imperativa delen av

Läs mer

Objektorienterad Programkonstruktion. Föreläsning jan 2016

Objektorienterad Programkonstruktion. Föreläsning jan 2016 Objektorienterad Programkonstruktion Föreläsning 13 19 jan 2016 Tentamen Del I, E del Flervalsfrågor 20/25 krävs för godkänt, ger betyg E Upp till 7 möjliga bonuspoäng Del II, Högrebetygsdel Problemfrågor

Läs mer

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning. Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java

Läs mer

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel Föreläsning 3 Innehåll Generiska klasser Implementera generiska klasser Exceptions Dokumentationekommentarer javadoc Enhetstestning - junit Man kan deklarera en eller flera typparametrar när man definierar

Läs mer

Arv. 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 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 mer

TDDE10 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 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 mer

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

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 AID-nummer: Datum: 2014-12-18 Kurskod: 725G61 Provkod: LAB1 Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 Skrivningstid: 2014-12-18 klockan 8.00-10.00. Hjälpmedel: Inga. För varje fråga

Läs mer

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

Dagens 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 mer

Tentamen Programmering fortsättningskurs DIT950

Tentamen Programmering fortsättningskurs DIT950 Tentamen Programmering fortsättningskurs Datum: 2015-03-17 Tid: 08.30-12.30 Hjälpmedel: Engelskt-Valfritt språk lexikon Betygsgränser: U: -23 G: 24-43 VG: 44-60 (max 60) Lärare:. Någon besöker ca 10.00

Läs mer

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem). 1 (7) TENTAMEN: Objektorienterad programmering Läs detta! Uppgifterna är inte ordnade efter svårighetsgrad. Börja varje hel uppgift på ett nytt blad. Skriv inte i tesen. Ordna bladen i uppgiftsordning.

Läs mer

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016 Command line argumenter Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 /* Cla. java * Programmet illustrerar

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Outline Felhantering Eclipse Felsökning Command line argumenter

Läs mer

Classes och Interfaces, Objects och References, Initialization

Classes 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 mer

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

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2 TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2 Pelle Evensen, Daniel Wetterbro 5 november 2009 Sammanfattning Denna vecka ska vi titta på abstrakta klasser kontra interface,

Läs mer

1 Comparator & Comparable

1 Comparator & Comparable 1 Comparator & Comparable 1.1 Implementation av Comparable Att implementera Comparable innebär att man gör objekt av sin klass jämförbara med andra och att det därmed antas existera en naturlig ordning

Läs mer

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

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel Idag Ett exempel Undantag Substitutierbarhet, subtyper, subklasser När val av metod beror av typerna hos två objekt Lite om överlagring Exempel, version 2 Notera: för samtliga figurer gäller: arean av

Läs mer

Föreläsnings 9 - Exceptions, I/O

Föreläsnings 9 - Exceptions, I/O Föreläsnings 9 - Exceptions, I/O Josef Svenningsson Tisdag 6/11 Undantag - Exceptions Kommer ni ihåg det här programmet? Det var ett av de första ni såg i första föreläsningen. import javax.swing.*; public

Läs mer

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Objektorienterad Programmering (OOP) Murach s: kap 12-16 Objektorienterad Programmering (OOP) Murach s: kap 12-16 2013-01-28 1 Winstrand Development Objektorienterad Programmering Förkortas OOP Objektorientering innebär att man delar in koden i olika block,

Läs mer

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

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

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

Att skriva till och läsa från terminalfönstret Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen

Läs mer

ADO.NET Murach Kapitel 17-20

ADO.NET Murach Kapitel 17-20 Databaser och C# ADO.NET Murach Kapitel 17-20 2013-01-30 1 Winstrand Development Databas ADO.NET Är en del av.net ramverket och tillhandahåller delar för att kommunicera med olika datakällor. Dessa kan

Läs mer

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

Fö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 mer

Chapter 4: Writing Classes/ Att skriva egna klasser.

Chapter 4: Writing Classes/ Att skriva egna klasser. Chapter 4: Writing Classes/ Att skriva egna klasser. I dessa uppgifter kommer du att lära dig om hur man definierar egna objekt genom att skriva klasser. Detta är grunden för att förstå objekt orienterad

Läs mer

Webbprogrammering. Sahand Sadjadee

Webbprogrammering. Sahand Sadjadee Webbprogrammering Sahand Sadjadee Agenda Webb The World Wide Web (WWW) is a network of online content that is formatted in HTML and accessed via HTTP. The term refers to all the interlinked HTML pages

Läs mer

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga 203-03-9 203-03-9 DIAGNOSTISKT PROV Tid Klockan 09.00-2.00 Hjälpmedel Inga Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas. Rättning Tentamen omfattar 6

Läs mer

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

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011) Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Innehåll Föreläsning 8 Två designmönster, MVC och Observer/Observable. Designrekommendation

Läs mer

Testning av program. Verklig modell för programutveckling

Testning av program. Verklig modell för programutveckling Fel i program När man skriver program uppkommer alltid fel. Felen kan indelas i följande kategorier: Under kompileringen upptäcker kompilatorn fel som handlar om att man använt konstruktionerna i programspråket

Läs mer

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

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp Föreläsning 4 Innehåll Abstrakta datatypen lista Definition Abstrakta datatypen lista egen implementering Datastrukturen enkellänkad lista Nästlade klasser statiska nästlade klasser inre klasser Listklasser

Läs mer

Tentamen, EDAA10 Programmering i Java

Tentamen, EDAA10 Programmering i Java LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen, EDAA10 Programmering i Java 2019 08 21, 08.00 13.00 Anvisningar: Preliminärt ger uppgifterna 25 + 15 + 5 = 45 poäng. För godkänt betyg

Läs mer

Arbeta med databas. Översikt. Lektion 1: Arbeta med Entity Data Models. Arbeta med Entity Data Models. LINQ (Language Integrated Query).

Arbeta med databas. Översikt. Lektion 1: Arbeta med Entity Data Models. Arbeta med Entity Data Models. LINQ (Language Integrated Query). Arbeta med databas Översikt Arbeta med Entity Data Models. LINQ (Language Integrated Query). Lektion 1: Arbeta med Entity Data Models Introduktion till ADO.NET Entity Framework. Stöd i ADO.NET Entity Framework.

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar

Läs mer

Mål med lektionen! Repetera och befästa kunskaperna.

Mål med lektionen! Repetera och befästa kunskaperna. Entity Framework Mål med lektionen! Repetera och befästa kunskaperna. Vad lektionen omfattar Repetera och gå igenom kursen lite snabbt. Vilka problem vill vi lösa? Vi arbetar med Webbapplikationer Vi kommer

Läs mer

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata Innehåll MySQL Intro Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata 1 Lagrad procedur / Stored Procedure Lagrad procedur har många namn, förkortningen

Läs mer

TDP025. Entreprenöriell programmering. Marcus Bendtsen Institutionen för Datavetenskap (IDA)

TDP025. Entreprenöriell programmering. Marcus Bendtsen Institutionen för Datavetenskap (IDA) TDP025 Entreprenöriell programmering Marcus Bendtsen Institutionen för Datavetenskap (IDA) Examensordningen I examensordningen står det att, för alla kandidatexamina skall (bland andra) följande mål uppnås:

Läs mer

Webbtjänster med API er

Webbtjänster med API er Webbtjänster med API er Mål med lektionen! En lite djupare inblick i RESTfulla tjänster Vad lektionen omfattar RESTful Services Överblick SOAP kan vara lite overkill för vissa specifika web service scenarion.

Läs mer

DAT043 Objektorienterad Programmering

DAT043 Objektorienterad Programmering DAT043 Objektorienterad Programmering Detta är en exempeltenta som innehåller gamla tentauppgifter av ungefär liknande slag som ni kan förvänta er se på ordinarie tenta i Del 1 respektive Del 2. Dock är

Läs mer

Generiska konstruktioner. Kursbokens kapitel 13

Generiska konstruktioner. Kursbokens kapitel 13 Generiska konstruktioner Kursbokens kapitel 13 1 Vad är en generisk konstruktion? Generisk står för; allmän eller generell En generisk konstruktion kan användas för olika typer av data Med hjälp av templates

Läs mer

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista Databaser Vad är en databas? Vad du ska lära dig: Använda UML för att modellera ett system Förstå hur modellen kan översättas till en relationsdatabas Använda SQL för att ställa frågor till databasen Använda

Läs mer

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

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet ITK:P1 Föreläsning 1 Att programmera i språket Java DSV Peter Mozelius Programmering Olika typer av programmering som t ex: o Imperativ programmering (C, Pascal m fl) o Funktionell programmering (Lisp,

Läs mer

TDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS

TDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS TDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS 180226 Idag (ADT), OOP i Racket, labb 5 2 Allmän info Duggan. Laboration 4 deadline. Planering framöver Muddy cards (nästa timme) 3 Lite repetition ADT

Läs mer

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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11 Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11 Undantag Engelska: exceptions Skansholm: exceptionella händelser Fel som genereras om man försöker

Läs mer

Algoritmer. Två gränssnitt

Algoritmer. Två gränssnitt Objektorienterad programmering E Algoritmer Sökning Linjär sökning Binär sökning Tidsuppskattningar Sortering Insättningssortering Föreläsning 9 Vad behöver en programmerare kunna? (Minst) ett programspråk;

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Abstrakta datatyper Listor Stackar

Läs mer

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

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA för SY2 1999-03-17, kl 14.00-18.00 Hjälpmedel: En lärobok i Java programmering Återlämningstillfälle:

Läs mer

Databasutveckling Microsoft T-SQL - Fortsättning. Funktioner GROUP BY HAVING Skapa databaser Skapa tabeller Lite om transaktioshantering

Databasutveckling Microsoft T-SQL - Fortsättning. Funktioner GROUP BY HAVING Skapa databaser Skapa tabeller Lite om transaktioshantering Databasutveckling Microsoft T-SQL - Fortsättning Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda Funktioner GROUP BY HAVING Skapa databaser Skapa tabeller Lite om transaktioshantering

Läs mer

VAD GÖR DU / VEM ÄR DU?

VAD GÖR DU / VEM ÄR DU? INNEHÅLL Vad blir din roll Databaser vad är och varför Terminologi Datamodellering vad är och varför Utvecklingsprocessen SQL vad är det Data / Information / Kunskap Kapitel 1 delar av. Praktisk Datamodellering

Läs mer

Föreläsning 3. Stack

Föreläsning 3. Stack Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista Evaluate postfix expressions Läsanvisningar

Läs mer

TDDC30. 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 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 mer

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine. Outline Objektorienterad Programmering (TDDC77) Föreläsning XIV: Undantag, Design Ahmed Rezine IDA, Linköpings Universitet Undantag Design Hösttermin 2017 En frukt har ett namn Man kan lägga en frukt i

Läs mer

Innehåll. Föreläsning 3. javax.naming.context. javax.sql.datasource. Vad är JDBC? Java Naming and Directory Interface(JNDI) Viktigaste metoder:

Innehåll. Föreläsning 3. javax.naming.context. javax.sql.datasource. Vad är JDBC? Java Naming and Directory Interface(JNDI) Viktigaste metoder: Föreläsning 3 JDBC Innehåll JNDI Java Naming and Directory Interface En slags DNS för Objekt JDBC Grunderna Uppkoppling Exekvera SQL-satser Ta hand om resulterande ResultSets Finesser PreparedStatement

Läs mer

Programmering för språkteknologer II, HT2014. evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/

Programmering för språkteknologer II, HT2014. evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Hashtabeller

Läs mer

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

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 2015-06-11 Skrivtid: 08:00 13:00 Hjälpmedel: Java-bok Tänk på följande Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning XIV: Undantag, Design Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2017 Outline Hashing Undantag Design Outline Hashing Undantag Design En frukt

Läs mer

Classes 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 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 mer

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

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering Institutionen för Datavetenskap CTH HT-6, TDA540 Dag: 207-0-24, Tid: 4.00-.00 Uppgift a) En abstrakt klass kan inte instansieras,

Läs mer

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU lösningsförslag till tentamen 2017-06-09 Tid: 8:30-12:30. Plats: SB. Ansvarig lärare: Fredrik Lindblad,

Läs mer

Testdriven utveckling. Magnus Jonsson Siemens Medical Solutions

Testdriven utveckling. Magnus Jonsson Siemens Medical Solutions Testdriven utveckling Magnus Jonsson Siemens Medical Solutions 2 Soarian Stort projekt, ca 400 personer i projektet Distribuerad utveckling i USA, Indien och Sverige Web baserat lösning med admin client

Läs mer

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

F9 - 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 mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Kursinformation Imperativa delen av

Läs mer

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap. Institutionen för Datavetenskap Göteborgs universitet HT2008 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Innehåll Föreläsning 4 Exempel på listor (klassen ArrayList). Ett exempel med fält.

Läs mer

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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11 Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11 Undantag Engelska: exceptions Skansholm: exceptionella händelser Fel som genereras om man försöker

Läs mer

Webbprogrammering - 725G54 PHP. Foreläsning II

Webbprogrammering - 725G54 PHP. Foreläsning II Webbprogrammering - 725G54 PHP Foreläsning II Agenda Serverskript PHP Validering av data med serverskript Säkerhet Lab 2. Live coding Serverskript Kör ett program på servern och resultatet skickas till

Läs mer

Kopiering av objekt i Java

Kopiering 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 mer

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

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering! Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering! Gränssnitt igen För att kunna ändra på olika delar av programmet utan att andra delar

Läs mer

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Föreläsning 4 Kö Föreläsning 4 ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista ADT Kö Grundprinciper: En kö fungerar som en kö. Man fyller på den längst bak och

Läs mer

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P UME UNIVERSITET Datavetenskap 981212 TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P Datum : 981212 Tid : 9-15 HjŠlpmedel : Inga Antal uppgifter : 9 TotalpoŠng : 60 (halva pošngtalet kršvs normalt fšr

Läs mer

Distribuerade affärssystem

Distribuerade affärssystem Distribuerade affärssystem Kursens mål Bygga upp, strukturera och programmera distribuerade system med en flerskiktsarkitektur Beskriva och förklara teorier och uttryck som används inom affärskritiska

Läs mer

Föreläsning 3-4 Innehåll

Föreläsning 3-4 Innehåll Föreläsning 3-4 Innehåll Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36 Diskutera Vad gör programmet programmet? Föreslå

Läs mer

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Vem är vem på kursen Objektorienterad programvaruutveckling GU (DIT011) Kursansvarig : Katarina Blom, tel 772 10 60 Rum: 6126 (E-huset)

Läs mer

Objektorienterad programmering D2

Objektorienterad programmering D2 Objektorienterad programmering D2 Laboration nr 2. Syfte Att få förståelse för de grundläggande objektorienterade begreppen. Redovisning Källkoden för uppgifterna skall skickas in via Fire. För senaste

Läs mer

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning. Programmering för Språkteknologer II Markus Saers markus.saers@lingfil.uu.se Rum -040 stp.lingfil.uu.se/~markuss/ht0/pst Innehåll Associativa datastrukturer Hashtabeller Sökträd Implementationsdetaljer

Läs mer

Klassen javax.swing.timer

Klassen javax.swing.timer Klassen javax.swing.timer I Swing finns en klass Timer som man kan använda för att upprepa en vis kodsekvens med jämna tidsmellanrum. Ett objekt av klassen Timer exekveras som en egen tråd. Ett objekt

Läs mer

Vad är en databas? Exempel på databaser: Databas = Organiserad samling och lagring av information.

Vad är en databas? Exempel på databaser: Databas = Organiserad samling och lagring av information. Vad är en databas? Exempel på databaser: Kortregister på kontor Sjukvårdsjournal Bokregister på bibliotek Medlemsregister i en förening Kundregister på företag Telefonkatalogen Databas = Organiserad samling

Läs mer

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1. Objektorienterad programmering E Telefonboken, än en gång Föreläsning 5 Wrapper classes Exempel, histogram. Inldening om undantag. Mer om klassen Påminnelse Vår senaste version bestod av två klasser, bägge

Läs mer

Webbtjänster med API er

Webbtjänster med API er Webbtjänster med API er Mål med lektionen! Titta på hur service:ar fungerar och hur vi programmerar dem. Vad lektionen omfattar WCF Service WCF Services Vad är en WCF service? En WCF Service är ett program

Läs mer

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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar

Läs mer

1 Klasser och objektorientering Vad är objektorientering?

1 Klasser och objektorientering Vad är objektorientering? 1 Klasser och objektorientering Vad är objektorientering? Det finns olika synsätt på programmering, dessa olika synsätt kallas för paradigm. De vanligaste paradigmen är det imperativa/proceduriella, det

Läs mer

Föreläsning 3. Stack

Föreläsning 3. Stack Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista ADT Stack Grundprinciper: En stack

Läs mer

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

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14. Tentamen 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.00, sal E33 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel

Läs mer

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om? Algoritmer och datastrukturer Allmänt om kursen Kort javagrund repetition - Klasser, metoder, objekt och referensvariabler, - Hierarkiska klass strukturer - Arrayer och arrayer av objekt - Collection ramverket

Läs mer

Introduktion till Entity Framework och LINQ. Källa och läs mer https://msdn.microsoft.com/en-us/data/aa937709.aspx

Introduktion till Entity Framework och LINQ. Källa och läs mer https://msdn.microsoft.com/en-us/data/aa937709.aspx Introduktion till Entity Framework och LINQ Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Vad är Entity Framework? The Microsoft ADO.NET Entity Framework is an Object/Relational Mapping

Läs mer

Föreläsning 14. Filhantering

Föreläsning 14. Filhantering Föreläsning 14 Filhantering Filhantering Att hantera filer, dvs att läsa eller skriva data till en fil är en viktig del i de flesta program. Ur Javas synvinkel är filer objekt med egenskaper och metoder

Läs mer

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

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem). 1 (11) TENTAMEN: Objektorienterade applikationer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. Skriv ditt idnummer på varje blad (så att

Läs mer

Några principer för effektiv enhetstestning

Några principer för effektiv enhetstestning Peter Lindberg Computer Programmer, Oops AB mailto:peter@oops.se http://oops.se/ Några principer för effektiv enhetstestning Enhetstester ( unit tests ) är en central del av extremprogrammering (XP). Man

Läs mer

Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDAA20/EDA501 Programmering LUNDS TEKNISKA HÖGSKOLA 1(4) Institutionen för datavetenskap Tentamen, EDAA20/EDA501 Programmering 2011 10 19, 8.00 13.00 Anvisningar: Denna tentamen består av fem uppgifter. Preliminärt ger uppgifterna

Läs mer

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. 1 (8) DUGGA: Objektorienterade applikationer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt namn, personnummer och e-postadress på försättsbladet. Skriv rent dina svar.

Läs mer

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: 13-06-05 Tid: kl 16.00-20.

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: 13-06-05 Tid: kl 16.00-20. Umeå Universitet Datavetenskap Anders Broberg 130605 TENTAMEN Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg VT-13 Datum: 13-06-05 Tid: kl 16.00-20.00 Namn: Personnummer:

Läs mer

Datavetenskapligt program, 180 högskolepoäng

Datavetenskapligt program, 180 högskolepoäng GÖTEBORGS UNIVERSITET UTBILDNINGSPLAN IT-fakultetsstyrelsen 2013-02-14 Datavetenskapligt program, 180 högskolepoäng (Computer Science, Bachelor s Programme, 180 credits) Grundnivå/First level 1. Fastställande

Läs mer

Objektsamlingar i Java

Objektsamlingar i Java 1 (6) Objektsamlingar i Java Objektorienterad programmering 3 Syfte Att ge träning i att använda objektsamlingar i Java. Mål Efter övningen skall du kunna använda objektsamlingsklasserna ArrayList och

Läs mer