Tarkvara arendamise etapid Klassikaline elutsükkel (“kosk-mudel”)
description
Transcript of Tarkvara arendamise etapid Klassikaline elutsükkel (“kosk-mudel”)
Tarkvara arendamise etapid
Klassikaline elutsükkel (“kosk-mudel”)
Süsteemianalüüs
Nõuete analüüs
Kavandamine
Kodeerimine
Testimine
Hooldus
Valdkonna analüüs
Ülesande täpne püstitus
Disain. Klassid
Algoritmid Programmitekstid
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ärkei 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 meetodeidteine klass: meetod antud lõigul olevate õnnelike arvude leidmiseks
Arvud
ristsumma( ) ristkorrutis( ) onÕnnelik( ) koosnebPaaritutest( )
OnnelikeOtsing
algus lõpp
main( )
Peaklass Numeroloogia meetodite klass
Mudel
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.ristsumma( ) Arvud.ristkorrutis( )
Arvud.koosnebPaaritutest( )
Meetodite rakendamise skeem
Kodeerimine
Väärtused võib võtta tüüpi int (maks. > 2 miljardit).
Klass Arvud, meetodite välised spetsifikatsioonid:
static int ristsumma (n)--- Antud: täisarv n, n 0--- Tulemus: tagastatakse arvu n ristsumma
class Arvud
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;}//ristsummastatic int ristkorrutis (n){// Antud: täisarv n, n >= 0// Tulemus: tagastatakse arvu n ristkorrutis
return 1;}//ristkorrutisstatic 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
Õ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
Kompileerimine:javac OnnelikeOtsing.java
Lahendamine:java OnnelikeOtsing
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.
• 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 saa sisaldada tühikuid
– ei tohi olla võtmesõna (class, int, true, if …
... ca 60 tükki, vt. Leksikon)
Nimed (identifikaatorid)
Nimed (identifikaatorid)
• TAVAD
klassi nimi - suur algustäht KlassiNimi
meetodi nimi - väikesed tähed meetodiNimi
muutuja nimi - väikesed tähed muutujaNimi
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 (KlassiNimi)
(mõnes keskkonnas peabki olema)
.class-fail tekib siis faili KlassiNimi.java
kompileerimisel ja nimeks on KlassiNimi.classhttp://www.ut.ee/~jaanus/java/projektid/Java_koodistandard.html
Avaldis A Operatsioon Avaldise A väärtuseks on
x = avaldisB Arvutatakse avaldise B väärtus ja omistatakse see muutujale x
x väärtus pärast operatsiooni
x++
x--
x = x + 1
x = x - 1
x väärtus enne operatsiooni
++x
--x
x = x + 1
x = x - 1
x väärtus pärast operatsiooni
Omistamine
AvaldisNäiteavaldis Väärtus
1.5 (literaal) 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)
y = avaldis Muutuja y uus väärtus
y += avaldis Sama, mis
y = y + avaldis
(avaldis) == avaldis
z = Math.sqrt(2*y)/(x = x + 1)ehkz = Math.sqrt(2*y)/(++x) ;
avaldis
avaldis
avaldis
avaldis
avaldisavaldis avaldis
avaldisdirektiiv
avaldis
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
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
piiritlejad -- võivad puududa
tagastustüüp meetodiNimi(formaalsete parameetrite loetelu){ lokaalmuutujad, direktiivid}
Meetodi kirjeldus (lühemalt: meetod):
Meetodi rakendus ehk väljakutse:
Klassi nimi. või isendiviit. -- võib puududa
meetodiNimi(argumentide loetelu)
Meetodint 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
piiritlejad
tagastustüüp
nimi (formaalsete parameetrite loetelu)
keha ehk sisu
public static void main(String[] args){
}form.param.nimi
form.param.tüüp
Programm RuutudeSummad.java
Arvuline meetod e. arvulist tüüpi (int, double, …) meetodstatic int m1( …){ … leida vastus - arvuline tulemus (nt. a) // tagastada tulemus: return a; // üldiselt: return arvuline avaldis;}
Loogiline meetod e. loogilist tüüpi (boolean) meetodstatic boolean m2( …){ … 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; 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, …) muutujaomab 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;