Vajad kellegagi rääkida?
Küsi julgelt abi LasteAbi
Logi sisse

Objektorienteeritud JAVA 2.kontrolltöö konspekt (1)

1 Hindamata
Punktid

Esitatud küsimused

  • Mis vahe on kontrollitud checked ja kontrollimata unchecked erinditel?
  • Mida teeb throws võtmesõna?
  • Mis vahe neil on?
  • Milles rikkumine seisneb?
  • Miks vähendada sõltuvust?
  • Kuidas sõltuvuse ära tunnete?
  • Kuidas määratakse lambda tüüp?
  • Mis on funktsionaalne liides functional interface ja milleks kasutatakse?
  • Mis on target typing?
  • Mis on sõltuvuse sisestamine dependency injection?
  • Mitu erinevat DataService teenust millist kasutada?
  • Mis on race condition konkurentsiolukord?
  • Millised võimalused on turvaliseks andmete jagamiseks lõimede vahel?
  • Miks andmete kasutust sünkroniseerida?
  • Miks lõimed ei näe üksteise tööd?
  • Kuidas tekib deadlock ja kuidas see on seotud einestavate filosoofide probleemiga?
  • Milline praktiline kasu on sellest et objekti monitori lukk on taassisenetav reentrant?
  • Miks selliseid meetodeid võimalusel vältida?
  • Mis vahe on sisemisel ja välimisel sünkroniseerimisel?
  • Millal on ülesande lahendamine lõimedega kiirem kui ühe lõimega?
  • Millal aeglasem?
  • Mille alusel valida sobiv funktsionaalne liides?
  • Kus püüda erindit?
  • Millise nimega threadi objekt ootab?
  • Mis juhtub kui lukustada immutable objekt ja siis seda muuta?
IDK0051  2. loengutesti kordamisküsimused kevad 2015 
 1. Kas  erind  (exception) on objekt?  
Spetsiaalne Throwable-tüüpi objekt vigade  haldamiseks  Javas. 
   Oskame  ette näha  olukordi , kus programm ei pruugi käituda soovitult 
  Võib-olla suudame programmi töö taastada 
  Informeerime kasutajat veast viisakal moel 
try {  
new Item(8);  
catch  (Exception e) { 
 System.out. print (e.getMessage()); }  Lisaks võimalik  finally  osa – täidetakse alati kui programm ellu jääb 
 
Exception ex = New Exception(„Viga”) : 
  tavaline uue objekti loomine  
  konstruktorile anname  String -tüüpi argumendi „Viga”  
 catch (SomeException e) : 
  püütakse kinni SomeException-tüüpi objekt, mida saab kasutada nime „e” abil 
 
2. Mis vahe on kontrollitud (checked) ja kontrollimata (unchecked) erinditel?  
Checked  exceptions  – kontrollitud  erindid
  Informeerivad kasutajat olukordadest, kus normaalse töö taastamine on võimalik,  
  Kasutaja peab nendega tegelema! 
  Kontrollime alati kas erind tekitati .. 
   Kui jah, siis töötleme seda  
   Võimalusel taastame programmi normaalse töö ...  
   ... ja/või vihjame kasutajale, kuidas seda teha 
Unchecked exceptions – kontrollimata  
  Taastumine pole tavaliselt võimalik 
  Kood kompileerub, aga kuskil on ( loogika )viga  
  Näiteks meetod ootab objekti, aga saab hoopis null; või jagamine nulliga (Kasutame parem 
Optionali ja vähendame tõenäosust) 
  Võib jätta töötlemata, eriti kui tulevad kellegi teise loodud API kaudu 
Errors - vead 
  Programmikoodist sõltumatud vead 
  Programmiväline viga, nt faili lugemine katkeb kõvaketta vea tõttu  
   Kasutajale kuvatakse töötlemata  veateade  
Reeglina on  arendaja  jaoks olulised checked exceptions e kontrollitud erindid. 
Unchecked exception viitab mingile (loogika)veale  programmis  - tavaliselt ei püüa, vaid parandame 
programmi. 
Error on programmiväline viga – seda me ise kunagi ei loo, nt  riistvara  rike. 
 
Erindid on laiendatavad. Exception  Runtime Exception 
                                                               [checked exception]SomeOtherException 
Erindi loomine : 
   Esmalt  mõtle, kas erindit on vaja!  
  Võib-olla saab  asendada  if- else  blokiga 
 
3. Kas peale erindi kinnipüüdmist on võimalik programmi normaalse tööga jätkata? 
Checked exceptions ehk kontrollitud erindid Informeerivad kasutajat olukordadest, kus normaalse töö 
taastamine on võimalik, seega on võimalik normaalse tööga jätkata. 
 
printStackTrace() : 
  kuvab informatsiooni vea esinemise kohta – nn veapinu – leiate vea allika  
getMessage() :  
  kuvab veateate 
Enda erindite loomine: 
  Esmalt püüa kasutada  Java  erindeid 
  Loomise eesmärgiks võib olla pakkuda spetsiifilisemaid  meetodeid  vea põhjuste kohta 
 
 4. Mida teeb throws võtmesõna? 
Mitte kunagi ärge kasutage seda main  meetodis , oma programmi sisendpunktis  Erindit ei ole sealt ju 
mitte kuskile edasi suunata! 
  throw new StudentException();  
   meetod peab informeerima kontrollitud erindi võimalikkusest: throws StudentException  
   Kui  veaolukord  tekib – loo kõige sobivamat tüüpi erind  
   Üldist tüüpi Exception objekti ei tohiks kunagi ise luua 
 
 5. Seleta voo ( stream ) mõistet üldiselt. Mis on  voog
Stream ehk  vood :  
  Andmete liikumise kanal  
  Küllaltki  abstraktne  mõiste  
  Stream ei  salvesta  andmeid  
  Stream ei muuda algandmeid 
Andmed, nt info.txt  Voog, nt FileInputStream Töötleja: for (c = in.read() ... 
 
Boilerplate – kood, mis funktsionaalsust ei lisa, kuid on vajalik, et programm töötaks.  Näited: main 
meetod, for  tsükkel  jmt 
 
Saate igast kollektsioonist voo moodustada. 
  Loetavam kood – kaob vajadus tsüklite ja itereerimise järele (seda teeb Java ise)  
  Efektiivsem kood – Java sisemine  optimeerimine  töötab arvatavasti paremini kui  omalooming  
 
 6. Kas Java 8 stream'ide meetodid  filter (), map(),  count (),  collect () on  entusiastlikud  ( eager ) või laisad 
( lazy ) meetodid? Mis vahe neil on?  
 
Eager methods (entusiastlikud meetodid) - alustavad kohe tööd. 
Lazy  method  (laisad meetodid) - viivitavad tööga kuni mõni entusiastlik meetod nad tööle paneb. 
Filter, map on lazy; count,collect on eager . 
 
 
 
 
7. Tooge näide, kus on rikutud kõrge kokkukuuluvuse ja vähese sõltuvuse printsiipi (high cohesion – 
low coupling). Milles  rikkumine  seisneb? 
Kõrge kokkukuuluvus (high cohesion) : 
  Hea OOP  arhitektuur  on selline, kus süsteem koosneb omavahel loogiliselt seotud klassidest, 
kus igal klassil on oma kindel roll 
Vähene  sõltuvus  (loose coupling) : 
  Samas on iga klass võimalikult sõltumatu ja seda saab vajadusel kasutada ka mõnes muus 
süsteemis 
 
Miks vähendada sõltuvust?  
  Komponentide  taaskasutus   
  Muutmisel on loogika ühes kohas  
  Kuidas sõltuvuse ära tunnete?  
o  Üks klass teab liiga palju teisest 
Register  register = new StudentRegister(); 
 int numOfStudents = register.numOfStudents;  Kõige lihtsam juhtum: kasutab teise  välju
 
Lahendus: eraldi meetod > int numOfStudents = register.getNumOfStudents(); 
Card c = new DebitCard(); 
 if (c.hasFunds()) { 
 if (c.notBlocked()) {  
if (c.onlinePaymentsAllowed()){ 
 c.makePayment( amount );}}}  Teab teise klassi detaile – kas on ikka vaja? 
 
Lahendus: intiimsuse 
vähendamine  Card c = new DebitCard(); 
 if (!c.makePayment(amount)) { // do  something  if  payment  fails }  Kontrolli õnnestumist... 
 try { c.makePayment(amount) 
 } catch (PaymentException e) { 
 // do something if payment fails } .. või kasuta erindeid Detailid jäävad DebitCard klassi 
Öelge  objektile , mida te teha  soovite , laske objektil otsustada.  
 
 8. Kuidas määratakse  lambda  tüüp?  
 Lambda – anonüümne funktsioon, mis realiseerib teatud tüüpi liidest. 
 
Eeldus: c on kollektsioon, nt List. See on source.  
long cnt = c.stream()/** loome kollektsioonist voo*/ .filter(s -> s.studies("IAPB"))./**filtreerime, 
intermediate  operation
*/filter(s -> s.hasGrade(3)) .count()/**tulemus, terminal  operation*/; 
 
Voog on ühekordseks kasutamiseks – vaheoperatsioone võib olla mitu, kuid üks lõppoperatsioon. 
 
Lambda tüüp ja argumentide tüübid määratakse selle meetodi kaudu, mis lambdat tarvitab, nt filter(): 
filter(Predicate predicate); 
 
Use  Case  
Examples of lambdas 
A boolean expression 
(List list) -> list.isEmpty() 
Creating objects 
() -> new  Apple (10) 
Consuming from an object 
from an object (Apple a) -> { 
System.out.println(a.getWeight()); } 
Select /extract from an object 
(String s) -> s.length() 
Combine two  values  
(int a, int b) -> a * b 
Compare  two objects 
(Apple a1, Apple a2) -> 
a1.getWeight().compareTo(a2.getWeight()) 
 
(parameters) -> expression   return ’I ei ole vaja  
 (parameters) -> { statements; }  return on vajalik 
 
c -> c.getName().equals("yellow"); 
c argument/id; -> lambda  nool ; argumendi kasutus lambda kehas; lambda keha; 
 
 
9. Mis on funktsionaalne  liides  ( functional   interface ) ja milleks kasutatakse? 
@FunctionalInterface  
public interface Predicate { 
 boolean test(T t); ... } 
Tähistatakse annotatsiooniga @FunctionalInterface  
Liides, mis sisaldab täpselt ühte abstraktset meetodit 
Functional interfaces provide  target   types  for lambda expressions and method references. Each 
functional interface has a  single   abstract  method, called the functional method for that functional 
interface, to which the lambda expression's  parameter  and return types are matched or adapted. 
 
Function    apply() 
Predicate   test()  
Consumer    accept() 
Supplier  get()    Generic types 
 
Olemas on palju spetsialiseeritud funktsionaalseid liideseid, mille kasutamine on efektiivsem kui üldise 
Functioni kasutamine, nt LongToIntFunction kui  sisend  on long ja väljund int 
 
 10. Mis on ja kuidas kasutatakse viidet  meetodile  obj::method süntaksiga 
Nagu viitame tavalisele Java objektile, saame viidata ka meetodile  Viide ::meetodi_nimi 
Viide saab olla viide klassile, objektile.. 
 
Kui viitate staatilisele meetodile: MyEntity(Viide klassile(klassinimi))::myMethod  Sulgusid ei ole! 
Kui viitate objektimeetodile: MyEntity m = new MyEntity();  
Viide objektile m::myMethod. Sulgusid ei ole! 
 
Viide meetodile ei ole  väljakutse
  SuperHero.rescueWorld(); - Väljakutse, käivitab meetodi! 
  SuperHero::rescueWorld; - Viide, ei käivita meetodit! 
Viidatud  meetodile lisatakse argumendid, kutsudes välja funktsionaalses liideses defineeritud meetodi. 
 
 11. Mis on target typing? 
Argumendi tüüp järeldatakse selle meetodi signatuurist, kellele ta argumendiks on:  
filter(s -> hasGrade())  Väljakutse 
 filter(Predicate) { Definitsioon 
Kuna filter() eeldab argumendina tüüpi Predicate, siis kontrollitakse, kas see lambda sobib Predicate'ks. 
 
The type of a lambda is deduced from the  context  in which the lambda is used. The type expected for 
the lambda expression inside the context (for example, a method parameter that it’s  passed  to or a local 
variable that it’s assigned to) is called the target type.  
The type-checking  process  is deconstructed as follows:  
 First, you  look  up the declaration of the filter method.  
 Second, it expects as the second formal parameter an object of type Predicate- (the target type).  
 Third, Predicate is a functional interface defining a single abstract method called test.  
  Fourth , the method test describes a function descriptor that accepts an Apple and  returns  a boolean. 
 
 12. Mis on sõltuvuse sisestamine (dependency injection)?  
  Sõltuvuse sisestamine klassi  
  Anname klassile mingi objekti, mida ta oma töös kasutab  
  Vastuvõttev klass ei pea ise mõtlema, millist tüüpi objekti luua või kasutada 
Näide : 
  Klass DataParser töötleb andmeid  
  Andmed tulevad ja  kirjutatakse  tagasi DataService-tüüpi teenusega  
  Olemas on mitu erinevat DataService teenust – millist kasutada? 
 
Sõltuvuse sisestamine (dependency injection): klass kasutab mingit teenust, mis on spetsifitseeritud 
liidesega. Klassi kasutaja/looja tarnib sellele liidesele vastava teenuse. 
public class DigiDocContainer {  
private CryptoAlgorithm cryto; 
 public DigiDocContainer( CryptoAlgorithm  crypto ) { 
 this.cryto = crypto; } } 
DigiDocContainer kasutab krüpteerimiseks mingit liidesele CryptoAlgorithm vastavat  algoritmi  objekti 
Konkreetne  realisatsioon  ( algoritm ) sisestatakse nt konstruktoris 
 
13. Mis on  race   condition  (konkurentsiolukord)? 
Programmi  korrektne  täitmine sõltub tegevuste järjestusest. 
Kui järjestus ei ole tagatud (nt atomaarse operatsiooni, sünkroniseerimise vmt abil), siis võib race 
condition põhjustada  bugi
Race conditionist põhjustatud mitmelõimelise programmi viga on väga raske tuvastada, sest see ei ole 
üheselt korratav – vea ilmnemine sõltub lõimede tööaja jagunemisest ja täitmise järjekorrast, mis erineb 
igal täitmisel 
 
 14. Millised võimalused on turvaliseks andmete jagamiseks lõimede vahel? 
1. võimalus:  
final   muutuja  abil  
  Kõik  lõimed  näevad garanteeritult final muutuja õige väärtust esimesel korral kui nad seda 
loevad  
  Samas see ei ole ülearu kasulik, sest final muutuja tuleks initsialiseerida  hiljemalt  konstruktoris 
Final tuleb kasutada kui soovite, et teie  lõim  näeks kindlasti mingit objekti, mille olete loonud enne 
lõime käivitamist 
 
 
Esimesena uurige alati, kas on võimalik andmete jagamist vältida, korraldada enne lõime käivitamist või 
minimiseerida. 
Võimalusel eelistage muudetamatuid andmeid: 
  Mutable types  Sisu võib peale loomist muutuda 
   Immutable  types  Peale loomist sisu ei muutu (Final keyword, Effectively final – peale loomist 
sisu ei muutu) 
 
 15. Selgitage kahte olulist ideed, miks andmete kasutust sünkroniseerida?  
Kui mitu lõime toimetavad sünkroniseeritud objektiga, siis on kindlustatud, et järgmine lõim näeb 
eelmise lõime töö tulemust. 
1.  Üks lõim ei näe teise tööd poolikult (inconsistent state) 
2.  
Üks lõim näeb, mida teine objektiga teinud on 
Sünkroniseerimine  on  vajalik ka selleks, et see koopia oleks ajakohane 
Ligipääs objektile või meetodile sünkroniseeritakse:  
  Tagame, et vaid üks lõim korraga antud koodi kasutab  
  Tagame koodi järjestikuse täitmise (synchronized keyword abil) 
Oht: kui sünkroniseerite lõimede põhitööks vajalikud andmed, siis ei pruugi lõimede kasutamine efekti 
anda 
Halval juhul võtab rohkem aega kui ühelõimeline lahendus (lõimede haldamise overhead) 
Sünkroniseerida saab: 
  Objekti 
  Meetodit (sünkroniseerib THIS objekti) 
  Staatilist meetodit (sünkroniseerib Class objekti) 
Miks lõimed ei näe üksteise tööd? Iga lõim töötab oma koopiaga muutujatest ja sünkroniseerib neid 
aeg-ajalt. Muutujate ajakohasus ei ole ilma kasutajapoolse sünkroniseerimisega tagatud. 
 
16. Mitu objekti võivad korraga objekti  monitori  lukus hoida (kindlasti uurige, kas ootav lõim hoiab 
monitori lukus või mitte)?  
Monitor  on  kontseptsioon , mis on vajalik lõimede töö koordineerimiseks  
 Igal objektil on monitor, mida lõim saab lukustada  
 Kui monitor on lukus, siis teine lõim seda kasutada ei saa 
Objekti kasutamist saab lukustada synchronized võtmesõna abil. 
 
17. Kirjeldage, kuidas tekib  deadlock  ja kuidas see on seotud einestavate filosoofide probleemiga?  
Üks lõim lukustab objekti monitori  ja kutsub välja teise lõime, mis soovib sama monitori kasutada. Üks 
ootab teise taga, kumbki ei saa jätkata.  
Sama einestavate filosoofide korral: iga  filosoof  tahab einestamiseks kaks kahvlit. Seega iga filosoof ei 
saa hakata sööma, kuni vasakpoolne  kahvel  vabaneb.  
 
18. Milline praktiline kasu on sellest, et objekti monitori  lukk  on taassisenetav (reentrant)?  
Java objektide monitorid on taassisenetavad (reentrant). 
Kui üks lõim paneb objekti monitori lukku ja kutsub sama lõime piires välja meetodi, mis seda uuesti 
lukustab, siis deadlock'i ei teki, kuna sama lõim võib uuesti siseneda 
  Enamasti kasulik 
  Ohtlik juhul kui sama lõim teeb mitu omavahel  vastuolus  olevat tegevust 
Tulnukmeetodid on sellised, mille üle te ei oma kontrolli – nt mõni ülekirjutatav meetod objektil, mida 
kasutaja võib muuta  
 Miks selliseid meetodeid võimalusel vältida? Vastus:  Võivad põhjustada deadlock'i 
 
19. Mis vahe on sisemisel ja välimisel sünkroniseerimisel? Leidke mõlema näide viimasest 
praktikumitööst, et veenduda oma arusaamises (näidislahendus Moodles).  
Sisemine sünkroniseerimine – objekt hoolitseb ise, et teda oleks turvaline lõimedes kasutada  
while(true) 
Väline sünkroniseerimine – kasutaja peab sünkroniseerima objekti kasutust synchronize() 
 
20. Kirjeldage lõimeturvalisuse  viit  taset Blochi järgi.  
Lõimeturvalisuse  tasemed  (Bloch)  
  Muudetamatud tüübid (immutable) – sünkroniseerimist ei ole tarvis, jagage julgelt lõimede 
vahel   
  Tingimusteta turvalised ( thread - safe ) – muudetavad, kuid sisemiselt sünkroniseeritud – võite 
julgelt kasutada 
  Teatud tingimustel turvalised – nt mõni meetod ei ole lõimedega kasutamiseks turvaline ja selle 
kasutamisel  vajab objekt eraldi sünkroniseerimist  
  Lõimedes kasutamiseks ohtlikud – tavaliselt muudetavad  klassid , mille kasutamisel tuleb alati 
väliselt sünkroniseerida 
  Lõimevaenulikud klassid (thread-hostile) – klassid, mille kasutamine isegi korraliku välise 
sünkroniseerimise puhul ei taga lõimeturvalisust. Selliseid  klasse  ei tohiks lõimedes kasutada 
Enamasti tingitud klassi sees sünkroniseerimata static muutujate kasutamisest 
 
Mõelge programmeerides, kas teie programm on turvaline lõimedega töö seisukohalt  
Seda isegi juhul, kui te ise oma programmis lõimesid ei kasuta 
 
21. Millal on ülesande lahendamine lõimedega kiirem kui ühe lõimega? Millal aeglasem?  
Kui  arvutil  on üle 1 tuuma ja task on piisvalt suur (s.t 1 thread ei tee seda kiiremini ära kui N threadi alles 
ennast püsti veavad) ja ülesanne on tükeldatav (Võimalik anda igale threadile oma töö, nii, et see ei häiri 
teisi, pisike häirmine lubatud, selleks on synchrnoized keyword, kuid üldjoontes nagu puude tassimine, 
vahet pole, saadad 10  mehikest  rabama, üksteist nad ei sega) 
 
22. Mille alusel valida sobiv funktsionaalne liides?  
Võid funktsionaalsest liidesest mõelda kui muutuja tüübist. Kui kasutada funktsionaalset liidest oma 
funktsiooni realiseerimisel void a(MyInterface), siis saad sellele funktsioonile ette sööta teise 
funktsiooni, mis täidab MyInterface reegleid. Üldjuhul pead arvestama sisend ja väljundandmetega. (Sa 
ei saa kasutada liidest, mis soovib tagastada  inti , kui vajad double ntx) 
Veel erinditest: 
Erindite aheldamine e chaining : 

  Liiga üldine viga täpsemaks  
  Liiga täpne viga üldisemaks  
  Mitme vea  liitmine  
 
Kus püüda erindit? 
  Kui püüda probleemi  tekkekohale  lähemal, siis on rohkem võimalusi probleemi lahendamiseks 
  Kui püüda võimalikult kõrgel tasemel, siis ei pea allpool liiga palju koodi erinditele kulutama 
(tsentraliseeritud veahaldus) 
 

Säilita veaeelne olukord (nn failure atomicity) 
Kui erind tekib, püüa see luua nii, et objekti olek ei saaks muudetud - nii on võimalik objekti peale vea 
põhjuse kõrvaldamist edasi kasutada 
 
Finally : 
  Finally  blokk  võimaldab lõputegevusi, mis tehakse igal juhul, sõltumata sellest, kas kood läbis try 
või kukkus catchi 
  Üldiselt ei kasutata eriti 
 
Voog vs kollektsioon: 
  Kollektsioonid on mõeldud objektide hoidmiseks ja efektiivseks haldamiseks - Reeglina huvitume 
objektidest  
  Vood on mõeldud objektikogumi töötlemiseks, teisendamiseks, üldandmete kogumiseks jms - 
Reeglina huvitume üldistustest 
Lõim ja protsess: 
  Põhimõtteliselt mõlemad tagavad koodi täitmise järjestatuse  
  Protsess – eraldi mälueraldusega  
  Thread e lõim – jagatud mälu 
  Kasutaja vaatevinklist on üks programm sageli üks protsess (kuid mitte alati!) 
  Üks protsess võib aga käivitada erinevaid lõimesid 
Paralleeltöö: 
Paralleeltöö ehk lõimedega  programmeerimine  on vajalik eelkõige kahel otstarbel:  
  teha mitut asja samal ajal  
  kasutada efektiivselt arvuti ressurssi (eelkõige protsessori tuumasid) 
Lõim ehk thread  
  Meie jaoks Java objekt  
  Oluline meetod run() 
  Kaks põhilist eesmärki: 
o  Teha mitut asja paralleelselt (nt UI ja taustategevused)  [Efekt saavutatakse ka ühe 
tuumaga arvutil] 
o  Kasutada maksimaalselt arvuti ressursse (nt andmetöötlus, arvutused jms) [Efekt 
saavutatakse mitme tuumaga arvutil] 
Lõimede loomine  
  Ise hallates ja Thread ja/või Runnable objekte  luues   
   Lastes  mõnel API-l lõimesid hallata 
join ()  
 Käesolev thread peab ootama kuni viidatud thread on töö lõpetanud: th.join();  
Millise nimega threadi objekt ootab? Vastus : Ei tea nime..  Pealõim ootas 
Paralleelne vs järjestikune täitmine  
  Lõimed töötavad iseseisvalt, mitte nii nagu me neid välja kutsume...  
  ... muidu poleks mõtet lõimesid luau 
Sleep peatab threadi täitmise  näidatud  ajaks (millisekundites); 
Lõime töö lõpeb kui run() meetod lõpetab 
Lõimede tööd saab katkestada Thread.interrupt(); 
Katkestamise korral väljastatakse InterruptedException, millega saab 
Optimiseerimine  
 JVM-il on lubatud lugemis- ja kirjutamisoperatsioone ümber korralda oma  äranägemise  järgi – ta ei pea 
neid  teostama   programmeerija  antud järjekorras 
volatile  
  Volatile võtmesõnaga tähistatud välja kõik lugemise ja kirjutamise  operatsioonid  toimuvad otse 
mälus, mitte lõime koopia peal  
  Volatile muutuja kirjutamist/lugemist ei tohi JVM  optimiseerida  operatsioonide 
ümberkorraldamisega 
Atomaarsus  
  Kui kaks lõime kasutavad sama muutujat, siis atomaarne operatsioon tähendab, et kõik ühe 
lõime poolt selle operatsiooni käigus tehtavad asjad tehakse järjest  
  Nt counteri realiseerimisel pole vaja atomaarset muutujat sünkroniseerida 
Operatsioonid long ja double tüüpidega ei ole atomaarsed (isegi mitte read ja write)  Vajalik 
sünkroniseerimine! 
java.util.concurrent. atomic   Objektid, mis  toetavad  atomaarseid operatsioone ilma 
sünkroniseerimiseta 
InterruptedException  
 Lõime tööd saab katkestada ja lõim saab sellega tegeleda  püüdes  kinni InterruptedExceptioni 
Deemonid   
Lõim, mille töö lõppeb, kui pealõime töö lõppeb 
wait():   
Kui lõime töö jaoks vajalik eeltingimus ei ole täidetud, võib ta synchronized bloki sees oodata kuni 
tingimus saab täidetud 
notify():  
Lõim, mis seda eeltingimust täidab, saab ootavale lõimele märku anda, et ta üles ärkaks ja uuesti 
prooviks 
Mis juhtub kui lukustada immutable objekt ja siis seda muuta?  
Me tegelikult ei peaks muutmiseks lukustama Integeri, Stringi jt muudetamatuid immutable 
objektitüüpe, kus objekt uuendatakse Lukustatakse objekt, mitte viide. Kui muudate nt Integeri väärtust, 
luuakse  uus objekt, millele te ei oma lukku 
Vasakule Paremale
Objektorienteeritud JAVA 2 kontrolltöö konspekt #1 Objektorienteeritud JAVA 2 kontrolltöö konspekt #2 Objektorienteeritud JAVA 2 kontrolltöö konspekt #3 Objektorienteeritud JAVA 2 kontrolltöö konspekt #4 Objektorienteeritud JAVA 2 kontrolltöö konspekt #5 Objektorienteeritud JAVA 2 kontrolltöö konspekt #6 Objektorienteeritud JAVA 2 kontrolltöö konspekt #7 Objektorienteeritud JAVA 2 kontrolltöö konspekt #8 Objektorienteeritud JAVA 2 kontrolltöö konspekt #9
Punktid 50 punkti Autor soovib selle materjali allalaadimise eest saada 50 punkti.
Leheküljed ~ 9 lehte Lehekülgede arv dokumendis
Aeg2015-09-30 Kuupäev, millal dokument üles laeti
Allalaadimisi 98 laadimist Kokku alla laetud
Kommentaarid 1 arvamus Teiste kasutajate poolt lisatud kommentaarid
Autor kisibii Õppematerjali autor

Sarnased õppematerjalid

Objektorienteeritud programmeerimise loengutekst
40
odt

Objektorienteeritud programmeerimise loengutekst

NB! Tunduvad võtmesõnadena, aga on literaalid: false null true Algtüübid: Täisarvud · byte(8-bitiline), short(16-bitiline ), int(32-bitiline), long(64-bitiline) Ujukomaarvud · float(32-bitiline), double(64-bitiline) Tõeväärtused · boolean(true, false) Sümbolid · char(16-bitiline Unicode-sümbol, 'u0000'(0) kuni 'uffff'(65535)) Nimi: · on tõstutundlik · võib sisaldada tähti, numbreid, _ , $ · ei tohi alata numbriga · ei tohi olla Java võtmesõna, · ei tohi olla true, false, null Ühiksuurendamine, ühikvähendamine ++muutuja : Muutujat suurendatakse ühe võrra ja seejärel arvutatakse avaldise väärtus kasutades muutuja uut väärtust muutuja++ : Avaldise väärtus arvutatakse kasutades muutuja vana väärtust ja seejärel suurendatakse muutujat ühe võrra --muutuja : Muutujat vähendatakse ühe võrra ja seejärel arvutatakse avaldise väärtus kasutades muutuja uut väärtust

Programmeerimine
Java programmeerimise konspekt
49
doc

Java programmeerimise konspekt

Meetod (alamprogramm) Java rakendus sisaldab põhiprogrammi (main), millest tõenäoliselt pöördutakse ka mingite alamprogrammide poole. Javas nimetatakse alamprogramme meetoditeks (tulenevalt selle keele objektorienteeritusest) ning meetodid on rühmitatud klasside kaupa. Meetodid võivad olla kas programmeerija enda poolt loodud või Javasse sisse ehitatud (nn. API meetodid, mille kirjelduse leiab Java dokumentatsioonist). Sõltumata sellest, kust meetod pärineb, võib see olla kas klassi- või isendimeetod. Klassimeetod (class method) , mida Javas kirjeldab võtmesõna static, on kasutatav n.ö. "igas olukorras", s.t. ei ole vajalik objektorienteeritud paradigma järgimine (esialgu püüame oma kursuses läbi ajada klassimeetoditega). Täpsemalt öeldes - klassimeetodi poole pöördumiseks ei ole vajalik objekti olemasolu. Klassimeetodi poole pöördumiseks kirjutatakse reeglina:

Java programmeerimine
Objektorienteeritud JAVA konspekt esimeseks kontrolltööks
10
pdf

Objektorienteeritud JAVA konspekt esimeseks kontrolltööks

Milles seisneb static typing ja dynamic typing erinevus? Static- Muutuja tüüpi on teada kompileerimise ajal ning seda muuta ei saa. See vähendab vigade hulka programmi töö ajal. Dynamic – Muutuja tüüp selgub programmi töö ajal. 2. Milliseid piiranguid seavad nähtavusele proteced ja package-private (default) nähtavused? Public – nähtav kõigile Package private- nähtav paketi sees Private – nähtav klassi sees Protected – nähtav paketi sees ja alamklassidele 3. Mis on Oracle Java virtuaalmasina (JVM) nimi? Kes ei tea, kukub ainest läbi :) JRE Java Runtime Environment – java programmi käivitamiseks JDK – Java Development Kit - arendusvahend java programmi arendamiseks 4. Tüübiteisendus - milleks vajalik, kuidas kasutatakse? Fruit a = new Apple(); Alamtüüp. Deklareeritud tüüp -- Loodud tüüp.Millist tüüpi deklareerida? - Eelistada alati üldisemat tüüpi Alamtüüpi objekti same alati kasutada ülemtüübina(implicit casting)

Objektorienteeritud programmeerimine JAVA
Java algajatele
39
pdf

Java algajatele

Java algajatele (v1.0 2011a) See on juhend kiireks Java õppimiseks, esialgsete teadmiste omandamiseks. Näited teen eclipse'iga. Koostanud Alex. Email: [email protected]. Tänud Roelile, kes leidis kirja- ja muid näpuvigasid ning tegi huvitavaid soovitusi manuaali redigeerimiseks/täiendamiseks! I. Valmistumine programmi kirjutamiseks. Alustame kõige lihtsamast asjast ehk põhimõttest. Programm koosneb pakettidest. Pakett koosneb klassidest, millest üks on alati main class, mis jooksutab teisi klasse. Main klassi all

Programmeerimine
Nimetu
575
docx

Nimetu

Sisukord Eessõna Hea õpilane! Microsofti arenduspartnerid ja kliendid otsivad pidevalt noori ja andekaid koodimeistreid, kes oskavad arendada tarkvara laialt levinud .NET platvormil. Kui Sulle meeldib programmeerida, siis usun, et saame Sulle pakkuda vajalikku ja huvitavat õppematerjali. Järgneva praktilise ja kasuliku õppematerjali on loonud tunnustatud professionaalid. Siit leid uusimat infot nii .NET aluste kohta kui ka juhiseid veebirakenduste loomiseks. Teadmiste paremaks omandamiseks on allpool palju praktilisi näiteid ja ülesandeid. Ühtlasi on sellest aastast kõigile kättesaadavad ka videojuhendid, mis teevad õppetöö palju põnevamaks. Oleme kogu õppe välja töötanud vabavaraliste Microsoft Visual Studio ja SQL Server Express versioonide baasil. Need tööriistad on mõeldud spetsiaalselt õpilastele ja asjaarmastajatele Microsofti platvormiga tutvumiseks. Kellel on huvi professionaalsete tööriistade proovimiseks, siis tasub lähemalt tutvuda õppuritele

Informaatika
Veebistuudium arendus ASP NET
212
docx

Veebistuudium arendus ASP.NET

arendamine Microsoft Visual Studio ja SQL Server'i baasil ASP.NET Tallinn 2011 ASP.NET ASP.NET on .NET raamistiku moodul, mis võimaldab sul luua veebirakendusi, kasutades sealjuures minimaalselt koodi. ASP.NET ei ole mitte ASP (Active Server Pages) uus versioon, vaid täiesti uus lähenemine veebirakenduste loomisele. Erinevalt ASPist ja ka PHPst, mis on peamiselt skriptimise keeled, on ASP.NET lehtede taga olev kood täielikult objektorienteeritud. Seega tuleks ASP.NETi võrrelda mitte PHP vaid JAVA rakendustega. Kasutaja saab, kuid ei pruugi täpselt mõelda HTMLi eripärade peale. Pigem määrab ta, milliseid komponente ta soovib veebilehel näha ning need näidatakse, arvestades vajadusel kasutaja veebilehitseja eripäradega ­ eriti kehtib see mobiilseadmete kohta. Koodi ASP.NET lehtede tarbeks võib kirjutada ükskõik millises .NET keeles. Lisaks veebivormidele on võimalik oma rakendust veebis serveerida ka läbi veebiteenuste.

Veebiprogrammeerimine
C-materjal
85
doc

C# materjal

C# õppematerjal 2006 Sisukord Sisukord...................................................................................................................................... 2 Sissejuhatus.................................................................................................................................5 Põhivõimalused...........................................................................................................................6 Käivitamine.............................................................................................................................8 Ülesandeid...........................................................................................................................9 Suhtlus arvutiga.......................................................................................................................9 Arvutamine................................................................................................

Programmeerimine - c sharp
RAS operatsioonisüsteemid - reaalajalised tuumad
21
pdf

RAS operatsioonisüsteemid - reaalajalised tuumad

· Immutable Objects ­ ei muudeta, väärtused (seisund) fikseeritakse loomisel, ei vaja sünkroniseerimist · Unsynchronized Objects ­ ühelõimeliste programmide korral pole vaja sünkroniseerimist · Sünkroniseerimismehhanismide lisamine objektidele lisab koodi, mida pole vaja, kui sünkroniseerimist ei kasutata ­ näit. class library tegemisel lisab koormust 71. Millal on reaalajasüsteemide programmeerimisel parem kasutada objektorienteeritud keeli, millal protseduurorienteeritud keeli? Protseduur vs OO: · Sõltub olukorrast Manussüsteemid - enamasti OO ei sobi 1. Programmi töökiirus 2. Ajaline ettemääratus 3. Programmi suurus PC (ja analoogilised) süsteemid ­ OO eelistatud 1. Arendamise mugavus 2. Arendamise kiirus [Objektorienteeritud keeled:

Reaalajasüsteemid




Kommentaarid (1)

Jollerr profiilipilt
14:40 06-05-2018



Sellel veebilehel kasutatakse küpsiseid. Kasutamist jätkates nõustute küpsiste ja veebilehe üldtingimustega Nõustun