PROCESSPROGRAMMERING

Slides:



Advertisements
Liknande presentationer
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Advertisements

Algoritmer och data strukturer -Länkade listor
Fortsättningskurs i Programmering lektion 6
Klassarv och inkapsling
OOP Objekt-orienterad programmering
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 10: Objektorientering Objektorientering och abstrakta datatyper Dynamisk bindning.
Metoder i java Det finns två typer av metoder i java
Arv.
Inkapsling.
Objektorienterad tänkande
Polymorfism.
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Programkodens uppbyggnad
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Alice in Action with Java
Föreläsning 4, Kapitel 4 Gruppera objekt Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
Föreläsning 11 Arrayer.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Klasser och objekt Klasser, objekt och instansvariabler
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( )‏ Innehåll:Trådsäkerhet - Intrinsic locks och synkronisering - Synchronized statements.
Datasamlingar och generiska enheter
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Föreläsning 8, kapitel 8 Förbättra strukturen med arv Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael.
Vektorer (klassen Vector) Sortering
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Räckvidd och synlighet. Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 22 Synlighet (meddelandesändning) Det.
UTVECKLING MED RAMVERKET.NET Marcus Medina. Dagens visdomsord ” Ingen vet vad han klarar innan han har försökt. ” - Publilius Syrus (85 f.Kr.-43 f.Kr.).
Arv.
Programmeringsteknik för Media1 & K1
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
OOP F6:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 6 Mer om klasser och objekt Hantera många objekt ArrayList toString() – metoden.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Trådsäkerhet - Memory consitency error - Guarded blocks - Lock Objects - Immutable Objects -
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.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
1 Windows programmering Programmering med Threads Borland C++ Builder 4 Modsoft Ab Kent Westerholm.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Jonny Karlsson GRUNDKURS I PROGRAMMERING MED JAVA Föreläsning 9 ( ) INNEHÅLL: -Tabeller av klassobjekt -Användning av Java API specifikationen.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Next previous Innehåll Del 1-trådar Del 2-URLer Del 1: Trådar Föreläsning 8.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Datastrukturer och algoritmer
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( )‏ Innehåll:  Introduktion till Java EE (Enterprise Edition)  Enterprise Java Beans.
Föreläsning 4 Klasser Och Objekt.
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
INTRODUKTION TILL PROGRAMMERING
PROCESSPROGRAMMERING Föreläsning 1 ( )‏ Innehåll: Introduktion till paralellprogrammering (“concurrent programming”)‏ Introduktion till parallellprogrammering.
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 2 ( )‏ Innehåll:Trådar: - Avbrott (”interrupts”)‏ - Metoden join()‏ Högnivå objekt för.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Programmeringsteknik för K och Media
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( )‏ Innehåll:  Att designa parallella program - manuell vs. automatisk parallellisering.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: -Exekveringstrådar.
Föreläsning 7 programmeringsteknik och Matlab 2D1312/2D1305 Metoddeklaration och parametrar Arrayer och ArrayList.
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 8: Exempel och problemlösning
Presentationens avskrift:

PROCESSPROGRAMMERING Föreläsning 5 - 21.9.2010‏ Innehåll: Trådsäkerhet - Trådkollision (”thread interference”) - Intrinsic locks - Synkronisering Datastrukturer - Listor (”List”)

Trådsäkerhet Trådar kommunicerar sinsemellan främst via gemensamma globala variabler. Denna typ av kommunikation är effektiv eftersom inget data behöver fysiskt skickas mellan två eller flera trådar Med trådsäkerhet menas att en viss del av en programkod fungerar korrekt även om den exekveras samtidigt av multipla trådar. En trådsäker kod måste se till att multipla trådar som hanterar gemensamma resurser (t.ex. varibler, objekt, odyl.) inte får ”förstöra slutresultatet” utan åtkomsten till resurserna måste på något sätt synkroniseras. . 2

Trådsäkerhet Kommunikation mellan trådar via gemensamma variabler kan dock ge upphov till problem, bl.a.: Trådkollision (”thread interference”)‏ 3

Trådkollision Innebär att två eller flera trådar uppdaterar en gemensam variabel samtidigt. Anta att två trådar inkrementerar en gemensam global variabel med 1. Om två trådar inkerementerar borde värdet i den globala variabeln ha ökat med 2. Men om de båda trådarna råkade inkrementera exakt samtidigt blir slutresultatet att den globala variabeln endast ökat med 1. 4

Synkronisering Ett sätt i Java att synkronisera trådar som använder en gemensam global variabel är att använda s.k. synkroniserade metoder (”synchronized methods”) För att göra en metod synkroniserad användar man sej av nyckelordet synchronized vid metoddefinitionen: synchronized void minSynkroniseradeMetod()‏ { } 5

Synkronisering Exempel: ... int raknare = 0; synchronized void inkrementera()‏ { raknare++; } Om flera trådar samtidigt anropar den synkroniserade metoden inkrementera() ovan kommer endast en åt gången in i metoden, övriga pausar sina exekveringar och väntar på att föregående tråd skall bli klar. 6

Intrinsic Locks och synkronisering Synkroniseringen är byggd runt en intern enhet som på engelska kallas för intrinsic lock eller monitor lock Varje objekt är associerat med ett intrinsic lock Varje tråd som vill komma åt ett objekts attribut måste komma över ett objekts intrinsic lock innan attributet är åtkomligt När tråden är klar måste den ”lösgöra” låset Så länge som en tråd ”äger” ett intrinsic lås kan ingen annan tråd komma över samma lås. Den andra tråden kommer att blockeras när den försöker komma över låset

Intrinsic Locks och synkronisering När en tråd anropar en synkroniserad metod tar den automatiskt över intrinsic låset för metodens objekt och lösgör låset när metoden returnerar (eller avslutas på annat sätt)‏ Vad händer då i följande fall??? Kan b manipuleras samtidigt som a inkrementeras? class variabler { int a, b; synchronized inkrementera()‏ a++; }

Intrinsic Locks och synkronisering class variabler { int a, b; Inkrementera2() b--; } synchronized inkrementera()‏ a++; SVAR: JO! om b manipuleras från en metod som inte är ”synchronized”

Intrinsic Locks och synkronisering class variabler { int a, b; synchronized inkrementera2() b--; } synchronized inkrementera()‏ a++; SVAR: NEJ! om b manipuleras från en annan ”synchronized” metod i samma objekt

Synchronized Statements Ett annat sätt att skapa synkroniserad kod är att använda synchronized statements Synchronized statements måste specificera det objekt som tillhandahåller intrinsic låset. public void addName(String name) { synchronized(this) lastName = name; nameCount++; } nameList.add(name);

Synchronized Statements I exemplet måste addName metoden synkronisera uppdateringar av lastName och nameCount men måste samtidigt undvika synkronisering av anrop av andra objekts metoder. Att anropa metoder ur andra objekt från synkroniserad kod kan ställa till problem (vi tittar närmare på detta lite senare)‏ Synchronized statements är också väldigt nyttiga om vi behöver synkronisera flera fält inom ett objekt som är oberoende av varandra Alla fält måste synkroniseras men det finns ingen orsak att hindra uppdatering av alla andra fält när ett fält uppdateras

Synchronized Statements public class MsLunch { private long c1 = 0; private long c2 = 0; private Object lock1 = new Object(); private Object lock2 = new Object(); public void inc1() { synchronized(lock1) { c1++; } public void inc2() { synchronized(lock2) { c2++;

Synchronized Statements I exemplet på föregående sida måste åtkomst av två attribut c1 och c2 synkroniseras c1 och c2 används aldrig tillsammans så det finns ingen orsak t.ex. att hindra att ingen annan tråd kan uppdatera c1 medan c2 håller på och uppdateras Vi kan då skapa två objekt av Object-klassen som vi ger som parameter til synchronzied På så så vis får vi uppdateringen av c1 och c2 relaterade till olika objekt även om c1 och c2 hör till samma objekt Detta gör parallelisering mycke smidigare eftersom vi undviker onödig blockering!!!

Synkronisering av statiska metoder Vad händer då om statisk synkroniserad metod anropas??? En statisk metod är ju associerad med en klass och inte med ett objekt!! I detta fall tar en tråd vid metodanropet över låset för klassobjektet associerat med klassen, m.a.o. åtkomst till en klass' statiska fält kontolleras av ett lås som är frånskilt från de lås som är associerade med instanser/objekt av klassen.

Listor En lista uppfyller alla egenskaper som ett fält (tabeller/arrayer) har + att den kan ändra sin storlek dynamiskt (Ett fält har alltid en max storlek) Typiska metoder för en lista är: public void add(int index, Object o) public Object remove(int index) public void setElement(int index, Object o) public Object getElement(int index) public int length(); Det nya, jämfört med fält, är egentligen metoderna add och remove

Listor: add Metoden add(int index, Object o) sätter in ett nytt element på ett visst index i listan ”Skuffar” först alla andra element från det givna indexet framåt så att det nya elementet skall få plats Vid anrop ökas listans längd med 1 och alla element >= nya elementets index ökar sina index med 1

Listor: remove remove(index) tar bort det element som finns på ett visst index. Elementet returneras Listans längd minskas med 1 De element som har har högre index än det index varifrån man tar bort, minskar sitt index med 1 för att ”fylla igen luckan”

Listor: ArrayList Ett enkelt sätt att implementera listor är att använda klassen ArrayList ArrayList erbjuder bl.a. följande metoder: add(E element) – sätter till ett element i slutet av listan add(int index, E element) – sätter till ett element vid ett specificerat indexvärde (skuffer resten framåt) get(int index) – Returnerar ett element från en specificerad position set(int index, E element) – Ersätter ett gammalt element med ett specificerat element remove(Object o) – Tar bort ett element från slutet av listan remove (int index) – Tar bort ett element från en given position

Listor: ArrayList Förenklat exempel: … ArrayList l = new ArrayList(); //skapar en ny Lista l.add(1); //sätter till 1 i sluet l.add(2); //sätter till 2 i slutet l.add(2, 3); //sätter till 3 vid index 2 i listan for(int i = 0; i < l.size(); i++) System.out.println(l.get); //printar ut hela listans innehåll

Listor: Fördelar Listor är lämpliga då vi jobbar med mängder (tabeller) som har dynamisk (varierande storlek) varifrån vi vill ta bort element och sätta till element var som helst i listan (inte endast i början eller i slutet)