310 likes | 959 Views
Tarkvara arendamise etapid Klassikaline elutsükkel (“kosk-mudel”). Valdkonna analüüs Ülesande täpne püstitus Disain. Klassid Algoritmid Programmitekstid. Süsteemianalüüs. Nõuete analüüs. Kavandamine. Kodeerimine. Testimine. Hooldus. Numeroloogia tarkvara.
E N D
Tarkvara arendamise etapid Klassikaline elutsükkel (“kosk-mudel”) Valdkonna analüüs Ülesande täpne püstitus Disain. Klassid Algoritmid Programmitekstid Süsteemianalüüs Nõuete analüüs Kavandamine Kodeerimine 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 rist- korrutis 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 Numeroloogia meetodite klass OnnelikeOtsing algus lõpp main( ) Arvud ristsumma( ) ristkorrutis( ) onÕnnelik( ) koosnebPaaritutest( )
Meetodite rakendamise skeem OnnelikeOtsing.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.koosnebPaaritutest( ). OnnelikeOtsing.main( ) Arvud.onÕnnelik( ) Arvud.koosnebPaaritutest( ) 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 koosnebPaaritutest (n) --- Antud: täisarv n --- Tulemus: tagastatakse true (JAH), kui arvu n kõik --- numbrid on paaritud, false (EI) vastasel korral (Arvud)
class OnnelikeOtsing 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 koosnebPaaritutest (n){ // Antud: täisarv n // Tulemus: tagastatakse true (JAH), kui arvu n kõik // numbrid on paaritud, false (EI) vastasel korral return true; }//koosnebPaaritutest }//Arvud
Kompileerimine: javac OnnelikeOtsing.java Lahendamine: java OnnelikeOtsing Õnnelikud 100 ... 999: 111 113 115 117 119 131 133 135 151 153 157 171 175 191 311 313 315 331 351 355 359 395 511 513 517 531 535 539 553 557 571 575 593 711 715 751 755 911 935 953
Nimed ehk identifikaatoridProgrammeerija 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. jaAk ja jAak on erinevad, String ja string on erinevad). • ei saasisaldada 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 KlassiNimi • meetodi nimi - väikesed tähed meetodiNimi • muutuja nimi - väikesed tähed muutujaNimialates 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 (KlassiNimi) • (mõnes keskkonnas peabki olema) • .class-fail tekib siis faili KlassiNimi.java • kompileerimisel ja nimeks on KlassiNimi.class • http://www.ut.ee/~jaanus/java/projektid/Java_koodistandard.html
Avaldis (avaldis) == avaldis
z = Math.sqrt(2*y)/(x = x + 1) ehk z = Math.sqrt(2*y)/(++x) ; avaldis avaldis avaldis avaldis avaldis avaldis avaldis avaldis avaldisdirektiiv
Avaldisdirektiivi erijuht (omistamistehteta): meetodi rakendus ehk meetodi väljakutse meetodiNimi(argumentide loetelu); Tavaline, kui meetodi tagastustüübiks on tühitüüp void. Näide: System.out.println();
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 Stringei ole algtüüp (on viittüüp)
MEETOD Meetodi kirjeldus (lühemalt: meetod): piiritlejad -- võivad puududa tagastustüüp meetodiNimi(formaalsete parameetrite loetelu) { lokaalmuutujad, direktiivid } Meetodi rakendus ehk väljakutse: Klassi nimi. või isendiviit. -- võib puududa meetodiNimi(argumentide loetelu)
Meetod int ruutudeSumma(int a, int b){ int c; c = a*a + b*b; return c; } int f(int a, int b, int c, int d){ int x, y; x = ruutudeSumma(a, b); y = ruutudeSumma(c, d); z = ruutudeSumma(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) { } piiritlejad tagastustüüp nimi (formaalsete parameetrite loetelu) keha ehk sisu form. param. tüüp form. param. nimi
Arvuline meetod e. arvulist tüüpi (int, double, …) meetod static int m1( …){ … leida vastus - arvuline tulemus (nt. a) // tagastada tulemus: return a; // üldiselt: return arvuline avaldis; } Loogiline meetod e. loogilist tüüpi (boolean) meetod static boolean m2( …){ … leida vastus – kas JAH või EI (true või false) // tagastada tulemus: returntrue; või returnfalse; // ü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; return true; } 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, i1; double x, y; i1 = 0; … z + w*2 ... Loogiline e. loogilist tüüpi (boolean) muutuja omab ühte kahest loogilisest väärtusest: true või false boolean k, m3; boolean g; k = true; m3 = (x <= 1); g = (c != (a + 2)); k = m3 && g;