Tarkvaraarenduse mustrid: Disainimustrid Tarkvaraarendus mõeldakse mustrite all peamiselt tarkvara disaini mustreid. Disaini muster on üldine taaskasutatav lahendus tavaliselt ettetulevate tarkvara disaini probleemide korral etteantud või esilekerkivas konteksti s (käsitluses). Muster pole lõplik disain, mida saaks otse teisendada algkoodiks või masinkoodiks. Ta on pigem kirjeldus või mall kuidas lahendada probleem nii, et seda saaks kasutada paljudel erinevatel juhtudel. Disainimustrid on formaliseeritud parimad praktikad, milliseid programmeerija saab kasutada teatud probleemi lahendamisel kavandades süsteeme või rakendusi. Objektorienteeritud disainimustrid näitavad tavaliselt objektide või klassidevahelisi sõltuvusi ja vastasmõjusid ilma kaasatud klasside või objektide hulgast lõplikke rakendusklasse või objekte määratlemata.
....................................................................11 Kasutatud kirjanudus...............................................................................................................13 2 Assembler Assembler on teise põlvkonna madaltaseme programmeerimiskeel, mis tõlgib assemblerkeeles programmi masinkoodiks. Assemblerkeeles on masinakäskude kahendkoodid asendatud mnemokoodidega ehk mnemooniliste tähistega. Näiteks 11110111xx100xxx, kus x-id tähistavad operandide aadressi arvuti mälus. Seega on assemblertranslaatori töö päris lihtne, see peab jaotama mälu instruktsioonidele ja andmetele, lisaks tõlkima iga muutuja ning sümboli masinkoodi. Lõpuks koondab see saadud koodi väljundformaati. Väljunditeks võivad olla kas objektkoodi - või käitusfailid
tervikuks Keele muudab arvutile arusaadavaks eriline süsteemitarkvara hulka kuuluv programm - keele translaator: · Kompilaator - tõlgib kõrgtaseme keelest masinkoodi (või mingisse nn. vahekoodi, näit. Java baitkoodi). · Interpretaator - täidab programmi ilma masinkoodi moodustamata; tavaliselt interpreteeritakse vahekoodi, mitte programmi teksti. · JIT (Just In Time) kompilaator - teisendab vahekoodi masinkoodiks "vajadusel" (näit. optimiseerimise eesmärgil). Näiteks keele Java korral Programmi elutsükkel (IDE mõttes - small picture, mitte segi ajada elutsükliga tarkvaratootmises): · programmi teksti sisestamine (näiteks notepad abil, programmi teksti toimetamiseks kontoripaketid hästi ei sobi!) · programmi kompileerimine (Java keele korral: javac Programm.java) · süntaksivigade parandamine (süntaksi silumine)
Wikipedia: 2001, Jimmy Wales and Larry Sanger 6. Nädal Eksamiks: turingi masin, relee, mälutüübid, assembler, kompileerimine, interpreteerimine, jit. Lihtsad andmetüübid, stringid, massiivid, puud. Turingi masin; Alan Turingi 1937. aastal kirjeldatud lihtne abstraktne arvuti, mida kasutatakse arvutatavuse ja selle piiride uurimiseks Relee: mootoriga lüliti Mälutüübid: Assembler: kompilaator, mis tõlgib assemblerkeeles programmi masinkoodiks Kompileerimine: võtab sisendiks kõrgkeelse programmi ja tõlgib selle täitmisprogrammiks. Kompileeritud täitmisprogrammi saab edaspidi iseseisvalt käivitada, vajamata seal juures keelevahendeid Interpreteerimine: loeb programmi lähtekoodi rida haaval, tõlgib rea kohe masinkoodi ning seejärel täidab String: tähemärkidest koosnev järjestikune jada Massiivid: jada ühetüübilisi väärtusi puud: andmestruktuur
Põhimõtteliselt saaks igas keeles kirjutatud programme nii interpreteeritult täita kui kompileerida. Praktikas eelistatakse vahel interpreteerimist, vahel kompileerimist. Interpreteerimisel on ka kompromissvariandid: 1) Kompilaator kompileerib X faili vahekoodiks Y, seejärel interpreteeritakse vahekoodi Y (Python, Java). 2) Interpretaator interpreteerib vahekoodi Y, kuid kompileerib töö ajal osa Y-st masinkoodiks, mida seejärel täidab (Java, C#, Firefoxi Javascript) nn just-in-time compilation ehk JIT. 3) Chrome V8 Javascript kompileerib algul kogu programmi masinkoodiks kiire kompilaatoriga, seejärel kompileerib töö käigus selgunud kriitilised kohad aeglasema optimeeriva kompilaatoriga, mis annab kiiremini töötava tulemuse. Parsimine – ehitab mällu süntaksipuu, mida siis edasi töödeldakse
5 Eksamiks: kompileerimine Eksam– EksamC, FORTRAN, Go interpreteerimine Eksam– programmi kood jooksutatakse otse masinkoodina ilma kompileerimata Py, php, Perl parsimine Eksam– Eksamsüntaksianalüüs – analüüsitakse arvutikeeles/andmestrukrtuurides (ehitatake süntaksipuu) esinevaid stringe vastavalt grammatikareeglitele jit Eksam– Eksaminterpretaator interpreerib vahekoodi Y, kuid kompileerib töö ajal osa Y-st masinkoodiks, mida seejärel täidab (nt Java, C#, Firefoxi JS) – Just-In-Time Eksamcompilation vahekood – nö pseudo-assembler, milleks teisendatakse interpreteerimisel kood, et rida-realt täita programmeerimiskeeled kirjelduskeeled Eksam– text lay - html, html lay - css, database query - sql, data representation - Eksamxml, Eksamjson, csv json Eksam- Eksam{“name”: “John Smith”, “age”: 35, “address”: {“city”:”Tallinn”, “street”: “Mere”}}
täitmine. Põhimõtteliselt saaks igas keeles kirjutatud programme nii interpreteeritult täita kui kompileerida. Praktikas eelistatakse vahel interpreteerimist, vahel kompileerimist. Kompromissvariante: Kompilaator kompileerib X faili vahekoodiks Y, seejärel interpreteeritakse vahekoodi Y (Python, Java). Interpretaator interpreteerib vahekoodi Y, kuid kompileerib töö ajal osa Y-st masinkoodiks, mida seejärel täidab (Java ja Firefoxi Javascript) nn just-in-time compilation ehk JIT. Chrome V8 Javascript: kompileerib algul kogu programmi masinkoodiks kiire kompilaatoriga, seejärel kompileerib töö käigus selgunud kriitilised kohad aeglasema optimeeriva kompilaatoriga, mis annab kiiremini töötava tulemuse. Kompileeritava programmi valmimine Olgu meil (näiteks C keeles) failid main.c ja swap.c Teeme gcc main.c swap.c -o minuprogramm
pole vahet, millises keeles programmeerid, sest kompileeritud kood on lõpuks ikkagi sama. Seega saab iga programmeerija valida endale just selle keele, mis kõige hingelähedasem. Järgmine tase on CLR e. Common Language Runtime (Mono puhul CLI virtual machine), mis pakub hallatud (turvalist) keskkonda programmeerimiseks. Selles hallatud keskkonnas on keskse kontrolli all klasside laadimise e. mälu hõivamine, mälu vabastamine (Garbage collector) ning vahekoodi kompilaator masinkoodiks. Lisaks pakub CLR programmi loomiseks vajalikke klasse. Lisaks klasside kasutamise võimalusele on paljud neist ka päritavad e. nendest on võimalik pärimise teel luua oma klasse. Kõrval asuvalt diagrammilt on näha, et raamistik lisab uue kihi programmi ja riistvara vahele, mis loomulikult ei mõju hästi programmi jõudlusele. Hea uudis on see, et Microsofti .NET raamistik integreerub üsna ilusti Windowsi sisse muutudes osaks Windowsist. Enamgi veel, kui võtta