Tarkvara arendamise etapid Klassikaline elutskkel koskmudel Valdkonna anals
- Slides: 31
Tarkvara arendamise etapid Klassikaline elutsükkel (“kosk-mudel”) Valdkonna analüüs Süsteemianalüüs Ülesande täpne püstitus Nõuete analüüs Disain. Klassid Algoritmid Kodeerimine Programmitekstid Kavandamine Testimine Hooldus
Numeroloogia tarkvara Süsteemianalüüs • õnneliku arvu mõiste • ülesanne: leida õnnelikke arve; kontrollida, kas arv on õnnelik • leidub inimesi, keda huvitab arvude õnnelikkust uurida
Numeroloogia Täisarvu numbrite kaupa analüüsimine. Arvu märk ei oma tähtsust. Ristsumma: arvu numbrite summa. Arvu 12075 ristsumma on 15. Ristkorrutis: arvu nullist erinevate numbrite korrutis. Arvu 12075 ristkorrutis on 70. Õnnelik arv: nii arv ise kui ka tema ristsumma ja ristkorrutis koosnevad ainult paaritutest numbritest. Arv 12075 ei ole õnnelik. Arv 11537 ei ole õnnelik. Arv 11539 on õnnelik.
Nõuete analüüs: mida täpselt teha • vaadeldakse ainult mittenegatiivseid arve • suurim arv ei ületa miljardit • ülesanne: leida ja väljastada konsoolile kõik õnnelikud arvud, mis asuvad antud lõigul • kui lõik on tühi, siis ei väljastata midagi • kasutajaliides (kasutamine): ainult väljastamine konsoolile • testiplaan: kontrollida (1) väikeste ja (2) suurte ja (3) mõnede vahepealsete arvude korral, (4) väikese ja (5) tühja lõigu korral
Kavandamine Alamülesanded • kontrollida, kas arv koosneb paaritutest numbritest • leida arvu ristsumma • leida arvu ristkorrutis • kontrollida, kas arv on õnnelik Arhitektuur üks klass: sisaldab alamülesannete lahendamise meetodeid teine klass: meetod antud lõigul olevate õnnelike arvude leidmiseks
Mudel Peaklass Onnelike. Otsing algus lõpp main( ) Numeroloogia meetodite klass Arvud ristsumma( ) ristkorrutis( ) onÕnnelik( ) koosneb. Paaritutest( )
Meetodite rakendamise skeem Onnelike. Otsing. main( ): iga arvu korral lõigul algus. . . lõpp kontrollida, kas see arv on õnnelik. Kui on, siis teatada (väljastada see arv). Õnnelikkust kontrollib meetod Arvud. onÕnnelik( ), mis omakorda kasutab meetodeid Arvud. ristsumma( ), Arvud. ristkorrutis( ), Arvud. onÕnnelik( ) ja Arvud. koosneb. Paaritutest( ). Onnelike. Otsing. main( ) Arvud. onÕnnelik( ) Arvud. koosneb. Paaritutest( ) Arvud. ristsumma( ) Arvud. ristkorrutis( )
Kodeerimine Väärtused võib võtta tüüpi int (maks. > 2 miljardit). Klass Arvud, meetodite välised spetsifikatsioonid: class Arvud static int ristsumma (n) --- Antud: täisarv n, n 0 --- Tulemus: tagastatakse arvu n ristsumma
static int ristkorrutis (n) --- Antud: täisarv n, n 0 --- Tulemus: tagastatakse arvu n ristkorrutis static boolean onÕnnelik(n) --- Antud: täisarv n --- Tulemus: tagastatakse JAH, kui arv n on õnnelik --- EI, vastasel korral
static boolean koosneb. Paaritutest (n) --- Antud: täisarv n --- Tulemus: tagastatakse true (JAH), kui arvu n kõik --- numbrid on paaritud, false (EI) vastasel korral (Arvud)
class Onnelike. Otsing static int algus = 570; // otsimislõigu algus static int lõpp = 580; // otsimislõigu lõpp public static void main(String[ ] args) väljastada(“Õnnelikud “ + algus + “ … “ + lõpp + “: ”); * n = algus, algus+1 … lõpp onÕnnelik(n) ? väljastada(n)
class Arvud{ static int ristsumma (n){ // Antud: täisarv n, n >= 0 // Tulemus: tagastatakse arvu n ristsumma return 1; }//ristsumma static int ristkorrutis (n){ // Antud: täisarv n, n >= 0 // Tulemus: tagastatakse arvu n ristkorrutis return 1; }//ristkorrutis static boolean onÕnnelik (n){ // Antud: täisarv n // Tulemus: tagastatakse true (JAH), kui arvu n on õnnelik, // false (EI) vastasel korral return true; }//onÕnnelik
static boolean koosneb. Paaritutest (n){ // Antud: täisarv n // Tulemus: tagastatakse true (JAH), kui arvu n kõik // numbrid on paaritud, false (EI) vastasel korral return true; }//koosneb. Paaritutest }//Arvud
Kompileerimine: javac Onnelike. Otsing. java Lahendamine: java Onnelike. Otsing Õnnelikud 100. . . 999: 111 113 115 117 119 131 133 135 151 153 157 171 175 191 313 315 331 355 359 395 511 513 517 531 535 539 553 557 571 575 593 711 715 751 755 911 935 953
Nimed ehk identifikaatorid Programmeerija poolt valitavad klasside, meetodite, väljade, lokaalmuutujate jmt. tähised Nõuded failinimedele on Java-välised, määratud kasutatava operatsioonisüsteemiga.
Nimed (identifikaatorid) • REEGLID – võivad sisalduda tähed (ka täpitähed), numbrid, _ , $ – ei tohi alata numbriga – pikkusel reaalsel kasutamisel häirivaid piire pole – suured ja väikesed tähed (nt. A ja a) loetakse erinevateks (nt. ja. Ak ja j. Aak on erinevad, String ja string on erinevad). – ei saa sisaldada tühikuid – ei tohi olla võtmesõna (class, int, true, if … . . . ca 60 tükki, vt. Leksikon)
Nimed (identifikaatorid) • TAVAD klassi nimi - suur algustäht Klassi. Nimi meetodi nimi - väikesed tähed meetodi. Nimi muutuja nimi - väikesed tähed muutuja. Nimi alates teisest sõnast suure tähega . java-fail võiks sisaldada ainult ühte klassi ja selle faili nimi võiks olla sama, mis on klassi nimi (Klassi. Nimi) (mõnes keskkonnas peabki olema) . class-fail tekib siis faili Klassi. Nimi. java kompileerimisel ja nimeks on Klassi. Nimi. class http: //www. ut. ee/~jaanus/java/projektid/Java_koodistandard. html
Omistamine Avaldis A x= avaldis. B Operatsioon Avaldise A väärtuseks on x väärtus pärast operatsiooni x++ x-- Arvutatakse avaldise B väärtus ja omistatakse see muutujale x x=x+1 x=x-1 ++x --x x=x+1 x=x-1 x väärtus pärast operatsiooni x väärtus enne operatsiooni
Avaldis Näiteavaldis 1. 5 (literaal) Väärtus 1, 5 x Muutuja x väärtus x + y x ja y väärtuste summa meetod(a) Meetodi poolt tagastatav väärtus (argumentavaldise a korral) Muutuja y uus väärtus y = avaldis y += avaldis Sama, mis y = y + avaldis (avaldis) == avaldis
z = Math. sqrt(2*y)/(x = x + 1) ehk z = Math. sqrt(2*y)/(++x) ; avaldis avaldisdirektiiv avaldis
Avaldisdirektiivi erijuht (omistamistehteta): meetodi rakendus ehk meetodi väljakutse meetodi. Nimi(argumentide loetelu); Tavaline, kui meetodi tagastustüübiks on tühitüüp void. Näide: System. out. println();
Algtüübid
Algtüübid Vt. Leksikon, märksõna: tüüp täisarvud int, byte, short, long ujupunktarvud float 32 -bitilised (7 tüvekohta) double 64 -bitilised (15 tüvekohta) -1, 7*10308… 1, 7*10308 char – 16 -bitilised Unicode-sümbolid boolean – true või false void – tühitüüp; kasutatakse ainult tagastustüübina, juhul kui tegelikult väärtust ei tagastata String ei ole algtüüp (on viittüüp)
MEETOD Meetodi kirjeldus (lühemalt: meetod): piiritlejad -- võivad puududa tagastustüüp meetodi. Nimi(formaalsete parameetrite loetelu) { lokaalmuutujad, direktiivid } Meetodi rakendus ehk väljakutse: Klassi nimi. või isendiviit. -- võib puududa meetodi. Nimi(argumentide loetelu)
int ruutude. Summa(int a, int b){ int c; c = a*a + b*b; return c; } Meetod int f(int a, int b, int c, int d){ int x, y; x = ruutude. Summa(a, b); y = ruutude. Summa(c, d); z = ruutude. Summa(x, y); return z; } void test(int a){ System. out. println(“Kui a = b = c = d = “ + a); System. out. println(“ siis f = “ + f(a, a, a, a)); }
Peameetod public static void main(String[] args) { } form. param. tüüp piiritlejad tagastustüüp nimi (formaalsete parameetrite loetelu) keha ehk sisu form. param. nimi
Programm Ruutude. Summad. java
Arvuline meetod e. arvulist tüüpi (int, double, …) meetod static int m 1( …){ … leida vastus - arvuline tulemus (nt. a) // tagastada tulemus: return a; // üldiselt: return arvuline avaldis; } Loogiline meetod e. loogilist tüüpi (boolean) meetod static boolean m 2( …){ … leida vastus – kas JAH või EI (true või false) // tagastada tulemus: return true; või return false; // üldiselt: return loogiline avaldis; }
Loogilise meetodi näide boolean onÜhiklõigul(double x){ // Antud: arv x // Tulemus: tagastatakse true, kui 0 x 1 if(x < 0) return false; if(x > 1) return false; if((x < 0) || (x > 1)) return false; return true; } if((x >= 0) && (x <= 1)) return true; return false; return (x >= 0) && (x <= 1) ; return !((x < 0) || (x > 1)) ;
MUUTUJA väli või parameeter või lokaalmuutuja class A{ int meetod( } } ){
Arvuline e. arvulist tüüpi (int, double, …) muutuja omab arvulist väärtust int z, w, i 1; double x, y; i 1 = 0; … z + w*2. . . Loogiline e. loogilist tüüpi (boolean) muutuja omab ühte kahest loogilisest väärtusest: true või false boolean k, m 3; boolean g; k = true; m 3 = (x <= 1); g = (c != (a + 2)); k = m 3 && g;