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

Objektorienteeritud JAVA konspekt esimeseks kontrolltööks (0)

5 VÄGA HEA
Punktid

Lõik failist

1. 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 ). Apple b = new Apple(); Fruit c =b; 
Vastupidine  tegevus nõuab selget teisendust(explicit casting) 
Allateisendus: Muudate objekti tüüpi kui teil on teada, et mingi (laiemat) tüüpi objekt on tegelikult 
kitsamat tüüpi.  Fruit a = new Apple(); JVM loob objekti ja unustab ,et see loodi Apple´st 
Deklareerime, et a on Fruit tüüpi.  
Kui  soovime  a-d uuesti Apple-na kasutada, peame tegema allateisenduse: Apple d = (Apple) a; 
 5. Olgu antud suvaline objekt. Millist tüüpi see teoreetiliselt võib olla? 
Liides , Klass, Alamklass,  Object (iga klassi ülemklass) 
 6. Milline on konstruktorite käivitusahel? Nt võib töösse tulla koodinäide ja teie ülesandeks on 
selgitada konstruktorite käivitamise  järjekorda
Meetod, mis käivitatakse automaatselt uue objekti loomisel.  Tagastab  viite loodud  objektile
Kasutatakse objekti algväärtustamiseks.  
Kõik objektid pärivad vaikimisi Object klassilt. Kui teie klassis puudub konstruktor,  luuakse  vaikimisi 
argumendita konstruktor. 
Uut objekti  luues  kutsutatakse alati välja  ülemklassi  argumendita konstruktor enne kui täidetakse käsud 
selle klassi konstruktoris. 
Kui  kirjutate  ainult argumendiga konstruktor, siis kompilaator argumendita verisooni automaatselt ei 
lisa. 
Mis juhtub, kui alamklassis on argumendiga konstruktor, aga ülemklassis konstruktor puudub? 
Kompilaator lisab ülemklassile argumendita konstruktori, alamklassist luues käivitatakse see enne 
alamklassi konstruktorit. 
Mis juhtub, kui alamklassis on argumendiga konstruktor, ja ülemklassis samuti ainult argumendiga 
konstruktor? 
Programm ei kompileeru, sest pole võimalik käivitada ülemklassi konstruktorit. 
Käivitusahel: Alamklass extends Ülemklass2, Ülemklass2 extends Ülemklass1. 
1.Ülemklass1 konstruktor, 2.Ülemklass2 kontruktor, Alamklass konstruktor 
Alamklassi konstruktori käivitades on ülemlassi väljad argväärtustatud. St alamklassi konstruktoris 
saame kasutada ülemklassi  välju  ja  meetodeid
 7. Kui ülemklassis on ainult argumendita konstruktor, aga alamklassis argumendiga konstruktor, kas 
see kood kompileerub? Miks? (Kõige lihtsam: proovige järgi!)  
Jah, sest kutsutakse esialgu välja ülemklassi argumendita konstruktor, mis meil olemas, ja seejärgi 
alamklassi konstruktor.  
8. Kui alamklassis on ainult argumendita konstruktor, aga ülemklassis argumendiga konstruktor, kas 
see kood kompileerub? Miks? 
Ei, sest kutsutakse välja ülemklassi argumendita konstruktor, mida meil ei ole ning kompilaator ei lisa 
automaatselt argumendita konstruktori. 
 9. Uurige, milliste käskudega toimib konstruktorite omavaheline ja ülemklassi konstruktori 
väljakutse .  
This(); Argumendiga konstruktor kutsub ülejäänud väljade väärtustamiseks argumendita konstruktorit. 
See väljakutse peab olema enne ülejäänud koodi, ehk 1. real
Super(); on ülemklassi konstruktori väljakutse. Super võtmesõnaga saame kasutada ülemklassi 
(ülekirjutatud) võimalusi, sh ülemklassi konstruktorit, välju ja meetodeid. 
10. Mis vahe on viidal ja objektil? 
Viide  ainult viidab mälukohale, kus asub see objekt.  
Viit  objektile endale - this  Enamasti ei ole tarvis kasutada,  piisab  meetodi või välja nimest: 
doSomething(); 
Kasutatakse nimekonfliktide vältimiseks ja konstruktorites - sh this() 
 11. Mis vahe on klassil ja objektil? 
Klass = tüüp, definitsioon (programmikood). Olemas ka siis kui programm parasjagu ei tööta. 
Objekt =  klassist  tehtud konkreetne eksemplar programmi töö ajal (new Type..) 
 12. Kirjutage üks polümorfse koodi näide ( polümorfism  == pärimisest tulenev polümorfism). Testis 
peate  hindama , kas mingi kood on polümorfne või mitte. 
Üldiselt kolme tüüpi polümorfismi:  
 Ülelaadimisest tulenev (ühe nimega meetod, erinevad väljakutsed . 
Geneeriline polümorfism (geneeriliste tüüpide abil)  
Pärimisest tulenev polümorfism (subtyping) 
 Objektorienteeritud programmeerimises peame polümorfismi all silmas eelkõige pärimisest tulenevat 
polümorfset käitumist 
 13. Mis vahe on meetodi override (ülekirjutamine) ja  overload 'il (ülelaadimine)? 
Override: Alamklass  defineerib  sama nime ja  samade  argumentidega meetodi. Tagastustüüp peab olema 
sama või originaaltüübi alamtüüp. 
Overload: Mitu sama nime, kuid erinevate argumentidega meetodit. Üle  laadida  saab nii ülemklassi kui 
ka sama klassi meetodit 
 14. Mida tagastab static  factory   method ?  
Static factory method on alternatiiv konstruktorile – loote objekti staatilise meetodi sees ja tagastate 
selle. NB! Ei tagasta mitte klassi, vaid objekti! 
Kontrollite väljastatud objektide arvu:  Võimaldab „kallite” objektide taaskasutust, nt 
andmebaasiühendus  
Kontrollite väljastatud objekti tüüpi: Väljastate lubatud tüübi asemel mõne optimiseeritud alamtüübi. 
Miks tagastada alamtüüp?  
Optimiseerimine – sobiv alamtüüp vastavalt andmete mahule või töökeskkonnale  
Äriloogika – sobiv alamtüüp vastavalt sisendargumendile (static factory method võib võtta ka 
argumendi) 
15. Mis vahet on static factory methodil ja konstruktoril? Kas need välistavad teineteist? 
Konstruktorite konflikt: 
 public Product(int  weight ) { } 
 public Product(int  length ) { }  
Parameetrid  weight ja length on erinevad, kuid sama tüüpi – kahte sellist konstruktorit luua ei saa 
 
 16. Tundke vähemalt kolme põhjust, miks kasutada static factory methodit 
1.Static factory  meetoditel  on nimed, nii et me saame kasutada rohkem kui üks factory method sama 
signatuuriga, mida ei saa teha konstruktorite puhul. 
2.Factory meetoditel ei ole vaja luau uut objekti: nad võivad tagastada eelnevalt loodud objekti.  
3. Factory meetodid võivad tagastada object  igat  alamtüübi, konstruktorid ei saa. 
 17. Mida hoitakse  pinus  ( stack ) ja kuhjas ( heap )? (Oluline teada ainult aines käsitletu piires). 
Stack ( pinu ) on mälupiirkond, kus:  
Kohene mälueraldus muutujatele nende deklareerimisel  
 Siin hoitakse primitiivset tüüpi väärtusi  
 Üks stack iga lõime (threadi) ehk käivitatava ühiku kohta 
Heap ( kuhi ) on mälupiirkond, kus: 
Mälueraldus vajaduse tekkimisel  
Siin hoitakse objektitüüpe 
 Üks heap terve JVM kohta 
 18. Mil määral saab null-viidaga objekti kasutada? 
null – praktilise käsitluse jaoks lihtsalt puuduv väärtus 
Sõnega „null” on seotud spetsiaalne nulltüüp  
 Null-tüübi väärtus on alati null-viide  
 Nulltüübil puudub nimi, ei saa deklareerida 
Objekti ei saa teisendada null- tüübiks
Null-tüüpi väärtuse (null-viida) võib omistada ükskõik millisele objektitüübile 
Null- viitega  muutujal ei saa välja kutsuda defineeritud tüübi meetodeid ega kasutada välju 
 
Objekt võib  puududa :  
 Andmebaasipäringu vastus  
Veebiteenuse vastus  
 Konfiguratsiooni osa   
Süsteemi  komponent  
 19. Mis on Optionali peamine mõte Java  programmis
Võimaldab selgelt väljendada, kui väärtuse puudumine on planeeritud stsenaarium 
Optional   optProd = Optional.of( prod ); static factory method 
optProd = Optional.ofNullable(prod);  Me ei ole kindlad, kas objekt on olemas või null 
 20. Milleks kasutatakse  Maven  ja  Gradle ?  
Maven is a  tool  that can help in creating,  building , publishing and managing dependencies for many 
applications. Maven is not  bound  to Java (Homepage) and it can be used with  other  programming 
languages   such  as PHP (Homepage). It is very  easy  to use and definitely worth its  money  (note that 
Maven is free) when compared with the time saved from doing the  repetitive  things ourselves. 
Maven is a  build  automation tool used primarily for Java  projects . The word maven  means  'accumulator 
of  knowledge ' in Yiddish.[3]Maven addresses two aspects of building software: First, it describes how 
software is built, and second, it describes its dependencies. Contrary to preceding tools like  Apache  Ant, 
it uses conventions for the build procedure, and only  exceptions  need to be written down. An XML file 
describes the software  project  being built, its dependencies on other  external  modules and 
components , the build  order , directories, and  required  plug-ins. It  comes  with pre-defined targets for 
performing certain well-defined tasks such as  compilation  of code and its packaging. Maven dynamically 
downloads Java libraries and Maven plug-ins from one or more repositories such as the Maven 2 Central 
Repository, and stores them in a  local   cache .[4] This local cache of downloaded artifacts can also be 
updated with artifacts created by local projects. Public repositories can also be updated. 
lternative technologies like gradle and sbt as build tools do not rely on XML, but  keep  the key concepts 
Maven introduced. With Apache Ivy, a  dedicated  dependency  manager  was  developed  as well that 
also supports Maven repositories. 
 
Gradle is a project automation tool that builds  upon  the concepts of Apache Ant and Apache Maven and 
introduces a Groovy-baseddomain-specific  language  (DSL) instead of the more traditional XML form of 
declaring the project configuration. 
Unlike Apache Maven, which defines lifecycles, and Apache Ant, where targets are invoked based upon 
a depends-on partial ordering, Gradle uses a directed acyclic  graph  ("DAG") to determine the order in 
which tasks can be run. 
Gradle was  designed  for  multi -project builds which can  grow  to be quite large, and supports incremental 
builds by intelligently determining which parts of the build tree are up-to- date , so that any  task  
dependent upon those parts will not need to be re-executed. 
The initial plugins are primarily focused  around  Java, Groovy and  Scala  development and  deployment
but more languages and project workflows are on the roadmap. 
21. Tehke selgeks abstraktse klassi peamised omadused (mis on  abstraktne  meetod, kas abstraktsest 
klassist saab objekti luua ning millises olukorras eelistada abstraktset klassi liidesele). 
Praktiline info: sellisest klassist ei saa luua objekti  
 Sellist klassi saab laiendada ja defineerida abstraktseid meetodeid – sarnane liidesega 
Abstraktset klassi kasutame reeglina ülemtüübina, kus saame meetoditele ka konkreetse realisatsiooni 
pakkuda  
 Liidest kasutame eelkõige sellise käitumise spetsifitseerimiseks, mis ei ole seotud kindla tüübiga 
 22. Mida kontrollib ==  operaator ? Mida teeb equals()? 
Primitiivsete tüüpide korral sisulist võrdsust: int a = 3; int b = 3; if (a == b) { // on võrdsed } 
Objektitüüpide korral samasust:  Student  a = new Student(„Mary”); Student b = new Student(„Mary”); if 
(a == b) { // ei ole samad } 
Objektitüüpide korral kontrollib, kas tegu on sama objektiga kuhjas (heap) 
equals() on meetod, mille eesmärk on kontrollida objektide sisulist võrdsust  
 Objektide korral kontrollib equals vaikimisi sama, mida ”==”: kas kaks  viita   viitavad  samale objektile  
Objektide korral  kasutage  equals(), aga: 
Objektitüübi jaoks tuleb equals() üle kirjutada, vaikeimplementatsioon Object klassis kontrollib, kas tegu 
on sama objektiga  
 Stringi (jt Java tüüpide) jaoks on Java  arendajad  selle töö teinud. Enda tüüpide jaoks peate ise equals()-i 
üle kirjutama 
 
 23. Millist tüüpi argumendi võtab equals() meetod? Miks?  
equals() omadused : 
 Sümmeetria: a.equals(b) saab olla tõene ainult siis kui ka b.equals(a)  
Refleksiivsus: a.equals(a)  
 Transitiivsus: kui a.equals(b) ja b.equals(c), siis a.equals(c) 
Object obj 
 
24. Kas õigesti realiseeritud hashCode() on alati igal objektil  unikaalne  (vt 7. nädala  materjalidest ). 
Meetod, mis tagastab objektile unikaalse räsiväärtuse (hashi), mis ei tohi muutuda kui objekti olek ei 
muutu. 
Initsialiseerige üheks: int hashCode = 1;  
Primitiivse numbrilise tüübi korral korrutage: 31 * hashCode + value  
 Objektitüübi korral kasutage väärtuse asemel objekti hashCode() 
Kui: a.equals(b)  ..siis: a.hashCode() tagastatav  räsi  on identne b.hashCode() tagastavaga 
 
 
 
 

  Ilma nähtavuse võtmesõnata koodiühik on kasutatav paketi sees. 
  Laiendav klass pärib kõik laiendatava klassi meetodid, mis ei ole private ning kirjutab üle kõik 
sama signatuuriga meetodid ülemklassis. Public  class  Laiendav(alamtüüp) extends 
Laiendatav(ülemtüüp). 
   Kompositsioon  – üht tüüpi objekti(osa) kasutamine teise objekti sees(tervik) 
  Liides: Public  interface  a; Class k implements a; Kui klass realiseerib lidest, võib objekti tüübi 
deklareerida liidese abil: SomeInterface s = new MyClass(); Eeldus, et MyClass implements 
SomeInterface 
  Geneerilised tüübid: Kui me konkreetset tüüpi ei tea, kasutame tüübimuutujat, selle n imi on 
kokkulepeline. Geneerilisest klassist saab luua ka nn toortüüpe(raw type). Eelistame geneerilist 
tüüpi objekti loomisel,mitte raw type. 
  Wildcard. Tüüp ei ole teada. Geneerilise tüübi puhul  omistatakse  tüüp objekti loomisel, wildcard 
Vasakule Paremale
Objektorienteeritud JAVA konspekt esimeseks kontrolltööks #1 Objektorienteeritud JAVA konspekt esimeseks kontrolltööks #2 Objektorienteeritud JAVA konspekt esimeseks kontrolltööks #3 Objektorienteeritud JAVA konspekt esimeseks kontrolltööks #4 Objektorienteeritud JAVA konspekt esimeseks kontrolltööks #5
Punktid 50 punkti Autor soovib selle materjali allalaadimise eest saada 50 punkti.
Leheküljed ~ 5 lehte Lehekülgede arv dokumendis
Aeg2015-09-30 Kuupäev, millal dokument üles laeti
Allalaadimisi 86 laadimist Kokku alla laetud
Kommentaarid 0 arvamust Teiste kasutajate poolt lisatud kommentaarid
Autor kisibii Õppematerjali autor

Sarnased õppematerjalid

thumbnail
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
thumbnail
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
thumbnail
18
pdf

Objektorienteeritud JAVA 2.kontrolltöö konspekt

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

Objektorienteeritud programmeerimine JAVA
thumbnail
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
thumbnail
184
docx

Andmebaasipõhiste veebirakenduste arendamine Microsoft Visual Studio ja SQL Server’i baasil

Andmebaasipõhiste veebirakenduste arendamine Microsoft Visual Studio ja SQL Server'i baasil C# Tallinn 2011 C# Mõnigi võib ohata, et jälle üks uus programmeerimiskeel siia ilma välja mõeldud. Teine jälle rõõmustab, et midagi uut ja huvitavat sünnib. Kolmas aga hakkas äsja veebilahendusi kirjutama ja sai mõnegi ilusa näite lihtsasti kokku. Oma soovide arvutile selgemaks tegemise juures läheb varsti vaja teada, "mis karul kõhus on", et oleks võimalik täpsemalt öelda, mida ja kuidas masin tegema peaks. Loodetavasti on järgnevatel lehekülgedel kõigile siia sattunute jaoks midagi sobivat. Mis liialt lihtne ja igav tundub, sellest saab kiiresti üle lapata. Mis esimesel pilgul paistab arusaamatu, kuid siiski vajalik, seda tasub teist korda lugeda. Ning polegi loota, et kõik kohe lennult külge jääks!? Selle jaoks on teksti sees koodinäited, mida saab kopeerida ja arvutis tööle panna. Ning mõningase muu

Algoritmid ja andmestruktuurid
thumbnail
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
thumbnail
134
pdf

Programmeerimine PHP

programmi, mis mõistis spetsiaalseid makrosid. Aja jooksul programmi modifitseeriti, laiendati, integreeriti andmebaaside ja uute tehnoloogiate toega ning lisati objekt-orienteeritud kontseptsiooni jne. Tulemuseks on PHP viies versioon. Kui vaatame programmeerimiskeelte populaarsust, siis näeme, et PHP on praegusel hetkel kolmandal kohal (eelmisel aastal aga viiendal). Arvestada tuleks ka sellega, et PHP on põhimõtteliselt serveripoolne skriptikeel. Java, C, C++ ja Visual Basic – neid kasutatakse rohkem tarkvara loomiseks aga see ei tähenda seda, et neid ei või kautatada ka veebiinfosüsteemide loomisel. Koht Programmeerimiskeel Reiting 1 Java 18.718% 2 C 16.891% 3 PHP 10.390% 4 C++ 9.911% 5 (Visual) Basic 8

Allika?petus
thumbnail
42
doc

Klassidiagrammid

Esmärk:  Ülevaade objektmodelleerimise põhimõistetest  Klassidiagrammides kasutatavate põhikonstruktsioonide tutvustamine Sisu  Objektid ja klassid  Klassidiagramm  Kuidas leida klasse ?  Atribuudid  Operatsioonid  Seosed  Piirangud  Mudeli kvaliteet Objektorienteeritud modelleerimises on põhilisteks elementideks klassid, objektid ning nendevahelised seosed . Kui modelleerimise eesmärgiks on tarkvarasüsteemide ehitamine, minnakse objektorienteeritud mudelitelt sujuvalt üle objektorienteeritud programmeerimise mõistetele / konstruktsioonidele, kus klassid ja seosed on teisendatud tegelikuks programmikoodiks. Objektid ja klassid Objekt on element, nähtus, asi, millest me räägime ja/või millega tegutseme. Objekt eksisteerib reaalses maailmas, täpsemalt, meie ettekujutuses sellest maailmast. Modelleeritavat osa maailmast nimetatakse tavaliselt objektsüsteemiks (ka probleemvaldkond, domeen)

Modulatsioon




Kommentaarid (0)

Kommentaarid sellele materjalile puuduvad. Ole esimene ja kommenteeri



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