Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)



Relevanta dokument
(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

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

F4. programmeringsteknik och Matlab

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

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

OOP Objekt-orienterad programmering

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Programmering för språkteknologer I, VT2012. Rum

Föreläsning 1 & 2 INTRODUKTION

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

SMD 134 Objektorienterad programmering

Tentamen OOP

Föreläsning 1 & 2 INTRODUKTION

TENTAMEN OOP

Objektorienterad programmering i Java

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Programmering A. Johan Eliasson

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Klassdeklaration. Metoddeklaration. Parameteröverföring

Föreläsning 2. Operativsystem och programmering

NetBeans 7. Avsikt. Projektfönster

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Introduktion till programmering och Python Grundkurs i programmering med Python

Tentamen , Introduktion till Java, dtaa98, dtea53

TDDC77 Objektorienterad Programmering

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

OOP Objekt-orienterad programmering

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

Inledande programmering med C# (1DV402) Introduktion till C#

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

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

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

JAVA Mer om klasser och objektorientering

Anteckningar 1: Grundläggande saker

Objektorienterad Programmering (TDDC77)

Övning2. Variabler. Data typer

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram?

Grundläggande programmering DVG A08 & ISG A04. Allmän information. Å vem är jag då. Karlstads Universitet, Johan Öfverberg 1

Iteration while-satsen

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

NetBeans 5.5. Avsikt. Projektfönster

Användarhandledning Version 1.2

Program & programmering

Föreläsning 3. Iteration while-satsen

TDIU01 - Programmering i C++, grundkurs

JAVAUTVECKLING LEKTION 4

Kompilera och exekvera Javakod

Editering, Kompilering och Exekvering av Javaprogram

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

Föreläsning 1. Presentation av kursen Vad är programmering? Lite om java och utvecklingsmiljöer Aktivitetsdiagram Ett första program

OOP Objekt-orienterad programmering

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

2D1339 Programkonstruktion för F1, ht 2004

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Föreläsning 3: Booleans, if, switch

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Läsanvisning: Dessa OH bilder samt kap 1-3

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

OOP F1:1. Föreläsning 1. Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning. Marie Olsson

Visual Basic, en snabbgenomgång

Objektorienterad programmering Föreläsning 2

Lite logik. Kap 6: Sid 2

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

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Objektorienterad Programmering (TDDC77)

TUTORIAL: KLASSER & OBJEKT

Tentamen , Grundläggande programmering i Java

Chapter 4: Writing Classes/ Att skriva egna klasser.

Laboration 1. "kompilera"-ikonen "exekvera"-ikonen

Övning 1. Datateknik A, Java I, 5 poäng. Att ladda hem och installera Java Att skriva ditt första Javaprogram Att kompilera och exekvera ditt program

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

Föreläsning 1-2 innehåll

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

"if"-satsen. Inledande programmering med C# (1DV402)

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Instuderingsfrågor, del D

Föreläsning 3. Iteration. while-satsen for-satsen do-satsen

Introduktion till algoritmer - L0 - Grunder i C++ Matematikgymnasiet, Läsåret L0 - Grunder i C++

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

Föreläsning 3-4 Innehåll

Transkript:

Lektion Java Grunder Javas historia Ursprungligen utvecklades Java (1991) för att användas i olika typer av konsumentelektronik (mikrovågsugnar, videoapparater) av programmerare på Sun. Språket kallades i början Oak men döptes senare om till Java eftersom det redan fanns ett språk som hette Oak. Det blev inget lyckat projekt och det hände inget mer. Men när Internet och www-utvecklingen på allvar tog fart 1995, så insåg man att Java var som klippt och skuren för Internet och så dammade man av och fräschade upp Java igen. Java började användas på webben 1996 då Netscape gav möjlighet att använda det i sin browser. Programmeringsspråket Java Java används dels för att skapa applikationer (vanliga program) som startas och körs lokalt på en dator, dels för att skapa applets (små program) som distribueras över Internet och körs lokalt (på hårddisken) hos besökaren. Applets gör att din hemsida blir mer interaktiv. Några av Javas karaktärsegenskaper är: Objektorienterat Ett av de dominerande tillvägagångssätten vid modern programmering är objektorientering. Mycket kortfattat går det ut på att programmen delas upp på mindre delar - objekt - som vart och ett har en uppsättning data, och metoder för att utföra vissa uppgifter. Portabelt Synonymt med plattformsoberoende, dvs kan köras på många olika datortyper (såväl en Unix arbetsstation som på en PC) utan att behöva anpassas först. Det enda kravet för att de ska kunna köras är att användaren har en web-läsare som kan hantera Java-kod (att den har en javatolk). Dynamiskt Bara de objekt som behövs för en given uppgift kommer att laddas. Enkelt och robust -Automatisk minneshantering -Inga pekare (vanligaste orsaken till fel i program) -Noggrann säkerhetskontroll både vid kompilering och när programmet skall köras Flertrådat Flertrådskörning (multithreading) är en modern teknik som medger en snabbare och effektivare körning av krävande program. Utökat med ett rikt förråd av färdiga paket T.ex. klasser som hanterar grafiska gränssnitt på ett enhetligt sätt (java.awt) och klasser för kommunikation över TCP/IP-nät (java.net). Skillnaderna mellan Java och C++ Man kan säga att Java är efterföljaren till C++. Programmerarna som konstruerade Java sneglade en hel del på C++ och såg till att anamma de bra bitarna. Eftersom Java konstruerades med Internet som användningsområde anpassade man det dessutom speciellt för nätverk. Men den absolut viktigaste skillnaden är graden av objektorientering. C++ uppmuntrar bara programmeraren att använda objektorientering medan Java tvingar programmeraren att använda det. Detta beror på att C++ konstruerades för att vara bakåtkompatibelt med C. JVM (Javas Virtuella Maskin) För att förstå tekniken bakom Javas Virtuella Maskin måste vi först ha lite allmän kunskap om de olika sätt datorprogram kan "skapas". Eftersom vi människor inte har direkt lätt för att förstå innebörden av ändlösa strängar av maskinkod skapade man redan i tidernas begynnelse olika "språk" som människor relativt enkelt kunde förstå och som dessutom kunde översättas till maskinkod vilka i sin tur datorerna förstår. Ganska snart bildades en uppsjö av olika språk och själva översättningstekniken kom att utvecklas åt två skilda grenar. Kompilerande språk och Interpreterande språk. /PB Sida 1

Kompilerande språk I kompilerande språk översätts språkets instruktioner (koden) till maskinkod av en kompilator som körs vid skapandet av programmet. Vid kompileringen är det också brukligt att kompilatorn analyserar koden och gör den snabbare och mer effektiv (optimering). Detta är en ganska tidsödande process, speciellt om man p.g.a. diverse fel tvingas kompilera om koden många gånger. Men i gengäld så får man en mycket effektiv och snabb kod när den väl är översatt (kompilerad). Exempel på kompilerande språk är: Assembler, C och Pascal. En kompilator översätter hela koden på en gång. Interpreterande språk Genom att helt enkelt låta bli att översätta koden till ettor och nollor förrän den berörda instruktionen i programmet exekveras så slipper man de irriterande väntetiderna som uppstår vid kompilering. De största nackdelarna med interpreterande språk är att de måste översättas varje gång man kör dem och att de inte kan optimeras på samma sätt som kompilerade program. Detta gör dem i regel ganska långsamma. En annan nackdel är att man måste skicka med själva Interpreten med programmet. Ett exempel på ett Interpreterande språk är Basic. En Interpreterare översätter koden allt eftersom den exekveras. Java, en kompromiss Java kan sägas vara en blandning mellan ett kompilerande språk och ett interpreterande språk. Det som händer är att källkoden(en fil med filändelsen.java) kompileras (översätts) till *bytekod* som lagras i en ny fil (med filändelsen.class). Denna procedur behöver bara utföras EN gång. Denna bytekod är plattformsoberoende och kan förstås av JVM (Javas Virtuella Maskin). När man skriver java Hej eller öppnar en applet i webbläsaren läses instruktionerna in och översätts till plattformsspecifik kod av JVM. Denna procedur måste upprepas VARJE gång programmet ska köras. JVM är egentligen inget annat än en vanlig interpreterarare. JVM är hemligheten bakom Javas plattformsoberoende. Fördelen med detta system är att koden blir plattformsoberoende. Nackdelarna är att koden inte kan optimeras fullt ut och att JVM måste vara närvarande för att programmen ska kunna exekveras. På detta vis har Java fått ryktet om sig att vara långsamt. JIT kompilatorer För att råda bot på hastighets problemen har en ny sorts Javakompilatorer utvecklats s.k. JIT (Just In Time) kompilatorer. De ersätter den gamla VM (Virtuella Maskinen) genom att istället för att som förut interpretera bytekoden, kompilera den direkt till maskinkod. Detta möjliggör att viss optimering kan utföras, eftersom denna kompilering och optimering sker varje gång applikationen eller appleten exekveras kan optimeringen inte vara för avancerad och tidsödande. Dessa JIT kompilatorer måste precis som JVM finnas närvarande för att programmen ska kunna köras. Det håller hela tiden på att utvecklas nya intelligentare versioner av dessa JIT kompilatorer som bara kompilerar och optimerar de delar av programmen där det verkligen behövs. Faktum är att Javas hastighet nu börjar kunna mäta sig med C++ i vissa avseenden. En JIT kompilator kompilerar bytekoden istället för att interpretera den. En programmerare skriver sin kod (kallas för källkod) och sparar den som en.java fil (textfil). Den kompileras sedan i en kompilator (ex. JDK) och sparas som en.class fil (bytekod). Detta innebär att du som användare/hemsidessnickrare inte kan gå in i en.class fil och ändra på något. Man kan nästan säga att en bytekodsfil är ett program och en.exe fil går man inte in och ändrar i. /PB Sida 2

Första programmet Skriv in följande kod.och spara filen som FirstProgram.java. public class FirstProgram //Skapar en klass vid namn FirstProgram public static void main(string args[]) System.out.println("Hejhopp, min första Java-applikation!"); Kompilera nu källkoden. Nu skapas en fil vid namn FirstProgram.class. Eventuellt kommer det nu ett eller flera felmeddelanden som behöver åtgärdas. Kör nu programmet. Om allt har fungerat som det var tänkt kommer du att se meddelandet Hejhopp, min första Javaapplikation! på skärmen. Rad1: class Hejhopp //Skapar en klass vid namn Hejhopp Med "class Hejhopp" skapar vi en klass och döper den till FirstProgram och eftersom denna klassen innehåller programmets "main" metod måste även själva källkodsfilen döpas till FirstProgram.java. Rad2: public static void main(string args[]) Detta är syntaxen för den huvudmetod (main) som måste finnas i alla Javaprogram jfr med C++ main. Nyckelordet "public" betyder att metoden är synlig och anropningsbar av andra klasser vilket är ett krav för mainmetoden. "static" betyder i det här fallet att man inte behöver tillverka ett objekt av klassen Hejhopp för att kunna anropa metoden main. "void" är ett bekant begrepp för er C++ programmerare. Returntypen void används när man vill tala om att man inte vill att metoden ska returnera något värde. Om du velat att metoden skulle returnera ett heltalsvärde skulle du skrivit int istället för void. "main" är namnet på metoden. "(String args[ ])" betyder att metoden main tar emot meddelanden (argument) av typen sträng vektorer. Datatyper Namn Minnesutrymme Typ Övrigt int 4 heltal -2147483648 till 2147483647 short 2 heltal -32768 till 32767 long 8 heltal 9miljadersmiljarder float 4 decimaltal 3.4*10 38 double 8 decimaltal 1.8*10 308 char 2 tecken UNICODEstandard (ASCII är en delmängd), t ex char yeschar= y ; boolean boolskt värde, Sant resp Falskt true eller false String strängar av T ex string str= HEJ ; tecken int[] heltalsarray T ex int[] tallista=1,2,3; eller t ex int tallista[3]; /PB Sida 3

Variabelnamn Variabelnamn i Java måste börja med en bokstav, sen kan namnet bestå av vilka tecken som helst, dock inte mellanslag. Det underlättar betydligt om man håller sig till ett system när man namnger sina variabler. Ungersk notation är ett av de mest använda. Då börjar alla variabelnamn med liten bokstav och har stora bokstäver för första bokstaven i alla efterföljande ord. T ex : int antaleleversomtyckerjavaärroligt (var noga med stora/små bokstäver eftersom Java gör skillnad på dem) char Datatypen char fungerar lite annorlunda, den kan som vi redan sagt lagra tecken. Egentligen lagras aldrig några tecken i variabler av typen char, det som lagras är ett tal som i sin tur representerar ett tecken. Det finns en tabell som översätter tecknen till tal och tvärt om. Den tabell som Java använder kallas Unicode och kan hantera 34168 olika tecken. Som tur är sköter Java denna "översättning" helt automatiskt, bara vi inte glömmer att omge tecknet som ska översättas med apostrof tecken ( ' ). För att skapa en char variabel som lagrar bokstaven A skriver vi bara följande: char bokstava = 'A'; För att sedan ta reda på vad tecknet A har för "värde" enligt Unicode tabellen kan vi skriva följande: int A = bokstava; För att lagra tecken 168 enligt Unicode tabellen i variabeln teckenettsexåtta skriver vi följande: char teckenettsexåtta = 168; Operatorer Eftersom Java har lånat sin syntax direkt från C++, har ni som har erfarenhet av C++ programmering ett litet försprång. Vi börjar med det som kanske är lättast att förstå, operatorerna. I Java finns följande operatorer +, -, *, /, = och %. Prioritetsordning är samma som i C++. Val Val är någonting som ofta behöver göras både i vanliga livet och i datorprogram. Det kanske enklaste sättet att göra val är att använda någonting som kallas för en "if" sats. Den ser ut så här: if (booleskt uttryck) else (booelska uttryck är uttryck som antingen är sanna (true) eller falska (false)). /PB Sida 4

Loopar I Java finns det tre olika sätt att utföra upprepningar eller loopar som de också kallas. while Den enklaste är while loopen. Den ser ut som följande: while (booleskt uttryck) while loopen fungerar så här: Om det booleska uttrycket är sant utförs alla satser mellan "måsvingarna". Satserna fortsätter att utföras i en loop ända tills det booleska uttrycket blir falskt. Om uttrycket är falskt redan från början utförs INGA av satserna. do - while Den andra loopen heter do-while loopen. Enda skillnaden mellan do-while loopen och while loopen är att i dowhile loopen utförs alltid satserna mellan måsvingarna minst en gång. do-while loopen ser ut så här: do while (booleskt uttryck); do-while loopen fungerar så här: Först utförs alla satser mellan måsvingarna en gång, sen kollas om det booleska uttrycket är sant, och är så fallet fortsätter satserna mellan måsvingarna att utföras ända tills det booleska uttrycket blir falskt. Om det booleska uttrycket skulle vara falskt redan från början utförs satserna, till skillnad från den vanliga while loopen, ändå EN gång. for Den tredje loopen heter for loopen och används för att utföra någonting ett bestämt antal gånger. For loopen är den mest komplexa av de tre looparna och ser ut så här: for (räknarvariabel; booleskt uttryck; ändringavräknare) satser; Den fungerar så här: Först lagras eller skapas den räknarvariabel som används till räknaren, sen kollas det booleska uttrycket och om det är sant utförs satserna mellan "måsvingarna". När loopen gått ett varv utförs ändringen av räknaren. for (int i = 0; i<100; i++) sats1;.. sats8; Denna for loop gör så att satserna 1 till och med 8 utförs 100 gånger. /PB Sida 5

Ytterliggare exempel: import java.util.scanner; public class SecondProgram public static void main(string[] args) int heltal; double decimaltal, produkt=0; Scanner sc = new Scanner(System.in); System.out.println("Hejhopp, min andra Java-applikation!"); System.out.print("Skriv in ett decimaltal(med kommatecken) som du vill "); System.out.println("multiplicera med ett heltal."); decimaltal = sc.nextdouble(); System.out.println("Skriv in heltalet."); heltal = sc.nextint(); produkt = decimaltal * heltal; System.out.println("Produkten = " + produkt ); System.out.println(" ** Svaret kom ut med punkt. Hej då! ** "); //slut på main-funktionen Några kommentarer. För inläsning från skärmen använder vi ett färdigt paket som heter Scanner. Det innehåller användbara metoder för inmatning av värden till programmet. För att komma åt dessa så skapar vi först ett objekt, i vårt fall sc, av typen Scanner. När vi har det så kan vi komma åt metoderna som finns i paketet med punktnotation. Vilka metoder som finns får man läsa om i böcker, webbsidor, och framför allt på Java s (Sun s) egna sidor. I övrigt kan vi nog lista ut vad programraderna gör. /PB Sida 6

Exempel 3 visar en do-while loop import java.util.scanner; public class ThirdProgram public static void main(string[] args) int heltal; double decimaltal, produkt=1; Scanner sc = new Scanner(System.in); System.out.println("Hejhopp, min tredje Java-applikation!"); do System.out.print("Skriv in ett decimaltal som du vill "); System.out.println("multiplicera med kommande tal."); decimaltal = sc.nextdouble(); produkt *= decimaltal; System.out.println("Produkten = " + produkt ); System.out.println("Vill du fortsätta, Ja=1, Nej=0?"); heltal = sc.nextint(); while (heltal==1); System.out.println(" *** Hej då! *** "); //slut på main-funktionen Exempel 4 visar hur man skapar en array, i detta fall för decimaltal import java.util.scanner; public class FourthProgram public static void main(string[] args) double summa=0; double[] decimaltal = new double[5]; Scanner sc = new Scanner(System.in); System.out.println("Hejhopp, min fjärde Java-applikation!"); System.out.println("Skriv in fem heltal som ska adderas. "); for (int i=0; i<5; i++) System.out.print("Skriv in tal "+ (i+1) +" : "); decimaltal[i] = sc.nextdouble(); for (int i=0; i<5; i++) summa += decimaltal[i]; System.out.println("Summan = " + summa ); System.out.println(" *** Hej då! *** "); //slut på main-funktionen /PB Sida 7

Övningar Övning J1.1 Skriv ett program som läser in två heltal och skriver ut förutom produkten av talen även summan. Om du t.ex. matar in 30 och 10 ska du få följande utskrift: RESULTAT ============ Produkten : 30 * 10 = 300 Summan : 30 + 10 = 40 Övning J1.2 Läs in tre decimaltal a, b och c och beräkna och skriv ut medelvärdet, (a+b+c)/3. Övning J1.3 Skriv ett program som läser in två tal och skriver ut det största av dessa två. Övning J1.4 Skriv ett program som läser in tre tal och skriver ut det största av dessa tre. Övning J1.5 Skriv ett program som läser in ett okänt antal tal och beräknar dess summa, som skrivs ut. Tips: t ex om man läser in talet 0 (noll) så hoppar man ur loopen och programmet avslutas. Övning J1.6 Läs in 10 st tal. Lagra dessa i en array. Läs in ytterligare ett tal, kontrollera och skriv ut hur många av de tidigare talen som är större än detta tal. Övning J1.7 Läs in 10 domarsiffror i backhoppning, alla givna med en decimal. Beräkna och skriv ut slutpoängen, som är lika med medelvärdet av de 8 som är kvar då det största och det minsta värdet tagits bort. Skriv först ut alla de ursprungliga domarsiffrorna, sen de återstående efter det att man tagit bort det största och minsta. /PB Sida 8