Föreläsning 1 sept 03 (måndag v 36). Välkommen till kursen och DD Chapter 1. En dators delar. (Cf DD 1.3 Computer Organization) Bilden visar hur vi kan tänka oss datorn när vi kör redigeringsprogrammet emacs. Ett redigeringsprogram (engelska editor) används för att redigera och framställa texter, t ex texten i ett javaprogram. ALU (styrning ) CPU (aritmetik) Datorns primärminne Variabler, (mellanresultat, buffrar mm som Emacs behöver) Översatta Emacs Metoder (Kod som styr datorn) inenhet utenhet sekundärminnen Forsta.java En fil. Data finns kvar så länge man vill 1234567890+ qwertyuiopå asdfghjklöä <zxcvbnm,.- Skivminne (hard disc, "hård disk") kommunikation med användare yttre enheter (periferienheter)
Koden som styr datorn. Programspråk. (Cf DD 1.6, 1.7, 1.8, 1,10) Objekt-inriktade språk (Objekt-Oriented) OO Traditionella imperativa språk funktionella språk Logik språk FORTRAN Algol 60 1960 lisp 1960 Simula Ole-Johan Dahl Krysten Nygaard Oslo 1967 Smalltalk Alan Kay Adele Goldberg Daniel Ingalss Utah, Xerox PARC Object Pascal Steven Jobs Lisa & Mac C Keringhan Ritchie Pascal Wirth Zurich Prolog 1970 C++ Stroustrup Objective C Cox modula2 Ada ML 1980 Eiffel Bertran Meyer Paris santa Barbara modula3 1990 Java James Gosling Sun Montain View Haskell
Klasser och klassbiblotek (Cf DD 1.9). Vi skriver ett javaprogram som en text (en massa tecken, dvs bokstäver, siffro, mellanslag osv). Texten definierar en (eller flera) klassdefinitioner som vi sparar på en (eller flera) filer på skivminnet. Filerna på sekundärminnen, t ex skivminnet, är organiserade i en hiarki, ett filträd. Detta görs genom att många filer innehåller listor över andra filer. Sådan filer kallas kataloger (directories) och är förgreningspunkter i filträdet. Fil med körbar kod, t ex emacs. kataloger directoies Fil med körbar kod, t ex översättaren javac. Fil med körbar kod, t ex tolken java. textfiler Skivminne (hard disc, "hård disk") körbar kod Filer med körbar kod översatta från javatext består av klasser. Delträd med klasser kallas klassbibliotek. Trädstrukturer ritas i datalogin i regel "upp och ner". "Löven" i träden kan vara filer med text eller filer med körbar kod. Hur får man datorer att köra ett visst program? När vi vill köra ett visst program måste vi ju fylla primärminnet i CPU med koden som finns på ett sekundärminne.
ALU (styrning ) CPU (aritmetik) Datorns primärminne Vi kör operativsystemets olika program t ex filsystemskommandon Hit vill vi flytta vår kod för programmet vi vill köra (Kod som styr datorn) inenhet utenhet sekundärminnen kataloger directoies Filerna är organiserade i ett filträd 1234567890+ qwertyuiopå asdfghjklöä <zxcvbnm,.- kommunikation mellan användare och OS Unix yttre enheter (periferienheter) textfiler körbarkod Skivminne (hard disc, "hård disk") färdigöversatt kod för programmet vi vill köra Dessutom: Hur kan vi hålla reda på alla filer? Hur kan många datorer dela på filer? Hur kan vi kommunicera mellan datorer osv? Jo en dator har ett "chefsprogram", ett OperativSystem (OS), som hjälper oss med allt detta. Även internetbläddare som Explorer och Netscape kan göra en del av detta. Exempel på OS: UNIX Windows 20 Linux MacOS. Institutionens för Numerisk Analys och datalogi (Nadas) teknologdatorer använder en UNIXvariant som heter Solaris. För att bekvämt göra labbarna i denna kurs är det bra om du kan en hel del av vad som står i " Unixanvändning på Nada eller Krama din dator!". Om filhantering och filträdet berättas i avsnitet 7.3 sid 20. Lämpligt öva på UNIX på labbarna v 36.
Javamiljön på NaDa (Numerisk analys och Datalogi på KTH) (Cf DD 1.13, Krama din dator avsnitt 15 sid 56). Fas 1. Vi skriver ett javaprogram som en text. Texterna definierar en (eller flera) klasser som vi sparar på en (eller flera) filer på skivminnet. Filerna på skivminnet skall sluta på.java. Detta arbete görs på datorn med hjälp av ett redigeringsprogram (editor), t ex emacs. Detta har jag försökt illustera ovan på bilden i avsnittet en dators delar. Fas 2. En kompilator används för att översätta texten i ett programspråk till mer maskinära kod. Javakompilatorn javac översätter korrekt javatext till kod för en påhittad dator JVM. Koden lagras på en class-fil. Vad händer i datorn, när vi kör kompilatorn javac? ALU (styrning ) CPU (aritmetik) Datorns primärminne Variabler, (mellanresultat mm som javac behöver) javac-kod som styr datorn inenhet utenhet sekundärminnen Forsta.class Forsta.java Skivminne (hard disc, "hård disk") Man får datorn att göra en kompilering av en javatext på filen Forsta.java med kommandot...>javac Forsta.java Om texten är korrekt fås resultatet på en fil Forsta.class, annars skrivs felrapporter på skärmen.
Fas 3, 4, 5. Laddning, verifiering och tolkning. Se DD. Körning av tolkprogrammet (interpretern gör att datorn förvandlas till en JVM, (Java Virtual Maskin). JVM-datorn finns alltså inte, utan vi kör på en Sun-dator. Men en dator kan alltid köra ett tolk-program (en interpretator) som gör att datorn fungerar som en annan dator. Körning av programmet java på Sun i äldre Sun-java-miljö gör att en Sun fungerar som en JVM. Pss kan internet-bläddare somnetscape och Explorer bli JVM maskiner och köra en viss sorts översatta java-program, s k applets. Modernare java-miljöer gör kod för den verkliga maskinen. Faser 3,4,5 får man utförda genom komandot...> java Forsta Vad händer i JVM-datorn/datorn, när vi kör koden i Forsta.class, dvs vi kör vårt program? ALU (styrning ) CPU (aritmetik) Datorns primärminne Variabler,(Data vlues, mellanresultat, mm) Översatta metoder i Forsta (Kod som styr datorn) inenhet utenhet yttre enheter (periferienheter) 1234567890+ qwertyuiopå asdfghjklöä <zxcvbnm,.- kommunikation med användare, dvs vi samverkar med Forsta-programmet Bra om du på labbarna v 36 kompiler och kör ett färdigt program, t ex gör uppgifterna i kapitel 15 i Krama din dator.
Vad blir det av klasserna när de hamnar i minnet? ALU (styrning ) CPU (aritmetik) Datorns primärminne Klassvariabler Variabler Från Forsta.class klassmetoder(kod som styr datorn) Metoder(Kod som styr datorn) inenhet utenhet Ytterligare objekt/(klassmetoder+klassvariabler) i minnet sekundärminnen Forsta.class En fil. Data finns kvar så länge man vill 1234567890+ qwertyuiopå asdfghjklöä <zxcvbnm,.- kommunikation med användare yttre enheter (periferienheter) Ytterligare klasser på skivminnet Klasserna finns ihopbuntade på kataloger, klassbiliotek Javatexten består alltså av klassdefinitioner som översätts. Resultatet finns på filer med subskript.class. Skivminne (hard disc, "hård disk"). Skivminnen är organiserade hirakiskt med kataloger, (directories) Klassdefinitioner kan innehålla definitioner av klassmetoder (kallas också statiska metoder) och klassvariabler (kallas också statiska variabler). När klassfilen som är resultatet av översättningen av en sådan klassdefinition laddas i minnet så finns exakt en plats i minnet för varje klassvariabel och klassmetod. Att använda klasser på detta sätt liknar traditonell programmering, och sådana klasser (med en enda klassmetod, main) beskrivs i DD i kap2, kap 4 och kap5. Klassdefinitioner kan också eller istället innehålla definitioner av instansmetoder och instansvariabler. Klassfilen som är resultatet av översättningen av en sådan klassdefinition används för att under körningen skapa objekt i minnet. Man skapr ofta många objekt av samma klass. Detta kallas objektinriktad programmering och behandlas på allvar från och med kap 8 i DD. Användning av färdiga objekt, specillt applets-objekt, behandlas i bl a kap 3.
Avslutande kommentarer: Varför datorer är användbara till så mycket : ALU (styrning ) CPU (aritmetik) Datorns primärminne Variabler, (mellanresultat, buffrar mm som programmet behöver) Vilket program som helst inenhet utenhet sekundärminnen 1234567890+ qwertyuiopå asdfghjklöä <zxcvbnm,.- givare kommunikation med andra datorer, nätet ställdon Skivminne (hard disc, "hård disk") kommunikation med användare yttre enheter (periferienheter) Några användningar: Beräkningar Simuleringar Kommunikation Komponeter i tekniska system
Är det roligt med datorer? Det beror mycket på programmet och yttre enheterna. Är det roligt att programmera datorer? Det är ju roligt att bestämma själv hur datorn skall fungera. Man måste kunna en hel del om: Tangentbordet Redigeringsprogrammet (t ex Emacs) Hur man kompilerar och kör och håller reda på filer (t ex kunna Unix) Programspråkets "meningsbyggndsregler" (t ex Javas syntax) Vad programspråkets konstruktioner betyder (t ex Javas semantik) Programspråkets klassbibliotek med färigskrivna hjälpbegrepp Hur man uttrycka lösningen på sitt problem i programspråket Kunna hitta en lösning på sitt problem Förstå sitt problem, vad man skall göra Bakgrundskunskper som underlättar är bl a Teori för programspråk och olika programmeringsparadigmer, t ex teori för Objektinriktad design och objektinriktad programmering Teori för Datastrukturer och Algoritmer Teori för numerisk analys och numeriska metoder
Övning 1. Frågor på hårdvara. 1. När en datorn exekverar ett program, var finns programmet, som består av kod (översatta metoder)? 2. När en datorn exekverar ett program, var finns variablerna? 3. Vad är det grekiska ordet för föreskrift, dvs något som säger hur något skall gå till? 4. Varför har man yttre enheter? Vad är det för vits med sekundärminnen? 5. Nämn några yttre enheter och media för lagring av data. 6. Nämn några yttre enheter gjorda för kommunikation med människor. (Några allmänbildningsfågor som inte har så mycket med kursen att göra) 7. Primärminnet, och de flesta sekundärminnet lagrar data och kod som mönster av "ettor" och nollor". En minnesposition för en "etta" eller "nolla" kallas en "bit". Vad kallas 8 bit? (Ordet påminner om det engelska ordet för "tugga"=mumsbit, bite). 8. På en hålremsa eller hålkort (stenålder) lagras en bit som hål i pappret/inte hål i pappret. Vilket fysikaliskt fenomen utnyttjas i skivminnen? I primärminnen?cd? 9. Hur stort är primärminnet på en 10 000 kronors dator? 10. Hur stort är sekundärminnet ("hård disken") på en 10 000 kronors dator? 11. Översättningen av Java-kommandon blir kod som består av något som kallas instruktioner. Ungefär hur många instruktioner per sekund kan en modern dator göra? 12. Vad är sorten för "per sekund", /s? Frågor på filer, Unix. 1. Vad menas med en fil? 2.. Vad menas med ett filträd? 3. Vad menas med en katalog? Engelskt namn för kataloger? 4. Vad menas med en sökväg? 5. Hur börjar en sökväg? 6. Delarna i en sökväg separeras med ett visst tecken i Unix. I Emacs? 7. Vad kan man göra med hjälp av en dators OS (operativsystem)? 6. Nämn några olika OS (operativsystem). 7. En del av det man brukar göra med hjälp av OS kan man istället gära med internet-bläddrar-program. Nämn några sådana program. 8. I en bläddrare, hur kommer man vidare till en ny sida? 9. I en modern bläddare, hur startar man ett program ( dvs en applet)? Frågor på Emacs, tecken och tangentbord. 1. Hur startas Emacs? 2. Vad menas med en buffer i Emacs? 3. Vad heter redigeringsprogram på engelska? 4. Kan java-kompilatorn direkt läsa i Emacs buffer. Om inte, vad skall man göra? 5. Kan man med Emacs redigera en fil man skivit förut? 6. Emacs styrs med menyer. Hur använder man menyer? 7. Om man ledsnar på att använda menyer och istället vill styra datorn med knapptryckningar, hur kan man i Emacs få reda på vilka knappar man skall använda? 8. Vad menas med C-x? 9. Det finns fyra mönster med två binära siffror, nämligen 00, 01, 10, 11. Hur många med tre siffror? fyra siffror? n-siffror? 7-siffror?8-siffror?
10. Om ett tangentbord ska kunna sända iväg 256 olika tecken, är det lite mycket att ha 256 olika tangenter. Hur gör man istället? 11. Nämn några "ändra betydelsen på andra knappar"-knappar! 12. När en skärm tar emot ett tecken blir det i regel en krumelur på skärmen. Men vissa tecken, styr-tecken, gör istället sådant som ny rad, ringer en klocka osv. Vad heter styrtecken på engelska? Hur genereras ofta sådan tecken på tangentbordet? Finns det styrtecken som också har egna tangenter? 13. Nämn några bokstäver! Engelska för bokstav? 14. Nämn några siffror. Är 123 en siffra? Engelska för siffra? 15. Flera bokstäver betecknar ofta ett ord. Vad kalls det som sifferkombinationer betecknar ( t ex 123)? Motsvarande engelska ord? 16. Nämn några specialtecken. 17. Svenskar betraktar åäö osv som särskilda bokstäver. Internationellet ser man dock ofta på saken som så att det är a och o med "tilläggskrumelurer". vad kallas "tillägggskrumelurer" med ett lärt ord (svårt)? Vad kallas dubbelprickarna (svårt)? Hur man programmerar och kör Java-program. 1. Beskriv hur man skriver, kompilerar och kör ett Java program. Antag att det man skriver är korrekt. 2. Vad menas med syntaxfel, typfel? Åtgärd? 3. Vad menas med exekveringsfel, logiskt fel? Åtgärd? 4. Vad heter java-kompilatorn? Hur körs den? 5. Vad vill java-kompilatorn ha för argument? Suffix? (efterled på namnet?). Skrivs ut? 6. Vilket resultat ger java-kompilatorn? Suffix? (efterled på namnet?) 7. Vad heter java-tolken? Hur körs den under Unix? 8. Vad vill java-tolken ha för argument? Suffix? Skrivs ut? 9. Vilket händer när tolken körs? Frågor på Java (efter förläsning 2, efter DD2). 1. Skriv en mall för en klassdeklaration ( eller ett exempel där du skriver vad delarna kallas). 2. I din mall, vilka ord är reserverade och vilka namn väljs av programmeraren? 3 5. Vilket namn har huvudprogrammet (huvudmetoden) i Java? 6. Vad är det som är så speciellt ( när programmet skall köras) med huvudprogrammet i Java? 7. Nämn den befolkningsrikaste ön i Indonesien? 8. Vilken kolonialvara är denna ös viktigste exportprodukt? 10. Java konstruerades för att kunna köras på alla möjliga maskiner. Därför innehåller klassfilen kod för en "påhittad" dator JVM Java Virtual maschine. Hur går det ofta till att köra klassfilen på en viss dator? 11. Internätbläddare kan också köra en viss sorts Java-program. Vad kallas sådana (i regel ganska små) applikationsprogram? 12. Vad betyder ordet virtuell? Applikation? Vad är det för skillnad mellan en star och en starlet? 13. Vad kallas följande tecken och gissa vad de används till i Java: + - * / ( ) = ; { } 14. Vad kallas följande tecken : [ ] ~ & # @
Java vett och etikett Källkod är skriven av och för människor, och därför ska den göras lättläst. Nedanstående rekommendationer underlättar för läsaren väsentligt och bör följas om man inte har mycket goda skäl till att bryta mot dem. Använd alltid beskrivande namn på identifierare. Följ befintlig praxis: Skriv Klasser med inledande STOR bokstav. Skriv variabler med inledande liten bokstav. Skriv metoder() med inledande liten bokstav. Glöm inte heller metodparenteserna. Skriv namnsombeståravfleraord med STOR första bokstav i varje ord (dock; för första ordets första bokstav har vi ju särskilda regler, ovanstående regler). Undvik l (lilla L ) och O (stora bokstaven). Indentera, ("intanda", tillfoga lagom antal blanktecken i början på rader) källkoden. I Emacs används TAB-tangenten (ibland märkt -> ) för att indentera aktuell rad. Gör detta uppifrån och ned i programmet. Skriv luftigt. Utnyttja mellanslag mellan operatorer (som t e x +, -, *, / eller = ). Frågor på vett och ettikett mm 1. Måste man följa regler för vett och ettikett? Kollar kompilatorn reglerna och "layouten"? 2. Bör man följa regler för vett och ettikett? 3. Vilka soters namn skall börja med STOR bokstav enligt vett- och ettikets-regleran? 4. Vilka soters namn skall börja med liten bokstav enligt vett- och ettikets-regleran? 5. Vilken regel gäller för filnamnet på en fil med java-text? 6. Människor organiserar ofta saker och ting i grupper, grupperna buntas ihop i supergrupper, supergrupperna buntas ihop i supersupergrupper osv. Sådan strukturer kallas i bland för trädstukturer. 6. Rita en trädstuktur för följande begrepp: Ryggradsdjur, männsikor, myror, apor, insekter, djur, primater. 6. Vilken svensk ordnade systematiskt faunan i en trädstruktur? 7. 10. Om du ser på innehållsförteckningen i en bok ( DD) är trädstukturen i föregående fråga framhävd genom blankteckensinskjutning. Kan man alltid visa trädstukturer med blankteckensinskjutning? 12. Vad heter tandläkare på engelska? Blankteckensinskjutning ("intandning")? 13. Om man tycker att det är jobbigt att skriva en massa blanktecken (= mellanslag) för att indetera, kan man om Emacs är lämpligt inställd istället använda en annan tangent? Vilken? 14. Vad är TAB förkortning av? 15. Vad kallas en uppsättning utseenden på olika tecken( till exempel bokstäver?) Exempel: ( Hejsan, Hejsan, Hejsan). 16. De här frågorna är skrivna i typnittet Palatino. Tar t ex m och i lika stor plats i typsnittet Palatino? 17. Finns det typsnitt där alla tecken tar lika stor plats? Fördelar och nackdelar med sådana typsnitt? 18. Nämn ett typsnitt där alla tecken tar lika stor plats! 19. Beskriv reglerna för hur { } placeras i en metoddeklaration. 20- Hur skrivs och används kommentarer i Java?