Download presentation
Presentation is loading. Please wait.
1
Razvoj programov
2
Proces programiranja Zamisel Besedilo programa, na papirju ali v glavi
Uporabimo urejevalnik besedila Prevajalnik-- preslikava programa Program v Java byte code, v datoteki Prog.class Program, zapisan v tekstovni datoteki (n.pr. Prog.java ) Java Virtual Machine JVM, izvaja program Prog.class
3
Programiranje in reševanje problemov
Koraki za pisanje programov upoštevajo korake za reševanje problemov Definiranje Razmislek Načrtovanje Izvedba Popravki, izboljšave
4
Popravki, izboljšave Ali program ustreza specifikacijam? Da
Ali so rezultati smiselni? Preverimo ročno Je program robusten in prijazen? (vsebuje komentarje za opis vhoda in izhoda) Ali lahko program še kako izboljšamo? Hmmm.
5
Primer priprave preprostega razreda
Napišimo program, ki izpiše kvadrat s pomočjo primernega izpisnega znaka. Nato narišimo več različnih kvadratov. Razčlenimo problem: Pomniti moramo velikost n in znak Zanka izpis vrstico za vrstico izpis n znakov v isti vrstici ****** ******
6
Kodiranje v Javi class Square {
int size = 2; // Store for size of square char pattern = '*'; // Store for character void draw() { for(int row = 1; row <= size; row++) { // to do ‘n’ (size) rows for(int col = 1; col <= size; col++) // loop to do one row System.out.print(pattern); // print one char at a time System.out.println(); // end of line move down } System.out.println(); } // draw method } // Square class
7
Uporaba razreda Square
public class UseSquare { public static void main (String[ ] args) { Square s1 = new Square(); // the class square is in the // default directory s1.draw( ); // use the draw square defaults s1.size = 5; // Change the size s1.draw( ); // Draw new square s1.pattern = '&'; // s1.draw( ); // } // main method } // UseSquare class
8
Pisec razreda, uporabnik, končni uporabnik
Pisec razreda (Class provider) Programer-uporabnik (Class User) Uporabnik programa (End User) V tem pa je že bistvo objektno usmerjenega programiranja (OOP)
9
Programerska orodja Dober urejevalnik teksta
lcc-win32 (prevajalnik, povezovalnik C) Integrirano razvojno orodje za Javo Urejevalnik prevajalnik razhroščevalnik dokumentacija Integrirano razvojno orodje za C decompiler (jave) Eclipse(Boljše itntegrirano razvojno orodje)
10
notepad++
11
lcc-win32
12
Dr Java
13
Eclipse
14
obratni prevajalniki Cavaj
15
Preskušanje programov
Programska oprema lovskega letala F16 je imela napako, ki je povzročala, da se je letalo obrnilo na glavo, kadarkoli je prečkalo ekvator (napako so odkrili na simulatorju in v resnici ni nikoli prišlo do tega pojava) Med in 1987 je računalniško krmiljena naprava Therac-25, uporabljena za obsevanje v bolnišnicah, povzročila zaradi programerske napake pacientom preveliko sevanje . Nekaj pacientov je celo umrlo.
16
Vrste programskih napak
Sintaksne napake Neupoštevanje formata in strukture jezika, kar odkrije prevajalnik Napake v času izvajanja (run time) Povzročijo lahko izjemne dogodke Logične napake Program se normalno zaključi, rezultati pa so napačni
17
Statična analiza programa
Statični programski analizatorji pregledajo kodo, ne da bi jo izvedli in ugotovijo: Napake v sintaksi kodo, ki ni dosegljiva, nedeklarirane spremenljivke, neinicializirane spremenljivke, neujemanje tipov parametrov, neklicane funkcije in procedure, spremenljivke, ki jih uporabljamo pred inicializacijo, možne prekoračitve mej, napačno uporabo kazalcev.
18
Zakaj preskušanje? Preskušanje programa na načrtovan in
strukturiran način s ciljem, da probleme odkrijemo Koda, ki jo napišemo, običajno ni takoj pravilna Pravilnost težko dokažemo, posebno v zelo velikih programih
19
Preskušanje Preskušanje naj bi izločilo čimveč “hroščev”
Preskušanje lahko dokaže prisotnost hroščev, ne pa njihove odsotnosti Pomaga nam preskušanje posameznih metod Pozitivno preskušanje: zagotoviti pravilno delovanje programa, če so podatki pravilni Negativno preskušanje: zagotoviti, da bo program znal rokovati z napačnimi podatki
20
Preskušanje Preizkusiti bi morali vse primere potekov programa
Običajno ne moremo preskusiti vseh kombinacij vhodnih podatkov Izbrati moramo testne podatke, s katerimi bi našli večino napak v čim krajšem času Pomagamo si lahko z napotki in heuristiko
21
Problemi preskušanja Tehnični: Psihološki:
Preskušanje je težavno in dolgotrajno Preskušanje moramo dobro pripraviti Preskušanje moramo ponavljati (regresijsko preskušanje) Psihološki: Programerji preskušajo le primere, ki so jih predvideli Izvajajo le pozitivne teste Na preskušanje vplivajo naše izkušnje
22
Napake med tekom programa(run-time)
Običajno jih povzročajo: Problemi z alokacijo pomnilnika Uporaba kazalca z vrednostjo null Neskončne zanke Logične- algoritmične napake Te napake rešujemo tipično z razhroščevanjem
23
Primer logične napake Logične napake najtežje odkrijemo. Program se prevede pravilno, rezultati pa so napačni. Naslednja koda naj bi povzročila izpis 5 zvezdic, izpiše pa le eno. Zakaj? for(int i = 1; i <= 5; i++); System.out.print(‘*’);
24
Napake zaokroževanja double x = 0.1;
Včasih da program napačne numerične odgovore. Do tega lahko pride zaradi napake zaokroževanja (rounding error), ki izhaja iz omejene natančnosti računalnika. double x = 0.1; while ( x != 0.2) { x += 0.01; System.out.println(x); } Ta program bi krožil neprekinjeno. Spremenljivka x nikar ne doseže vrednosti točno 0.2 (x zgreši vrednost 0.2 za približno 8.3 X 10-17). Bolje je, če stavek while zamenjamo z: while ( x <= 0.2) {
25
Razhroščevanje - debugging
Iskanje in odpravljanje napak v programu Razhroščevanje pride po preskušanju: Ko napako opazimo, poiščemo njen vzrok in ga odstranimo Kako razhroščujemo Opazovanje Branje kode Izvajanje na papirju Uporaba razhroščevalnih izpisnih stavkov Uporaba razhroščevalnika
26
Razhroščevanje s testnimi izpisi
Vstavimo preproste izpisne stavke na ključne položaje v naši kodi Na primer: printf(“Pred vstopom v zanko”); printf(“Po izstopu iz zanke”); Ponovno prevedemo in izvedemo. Glede na zadnji testni izpis lahko ugotovimo, kje približno je program obtičal. Z dodatnimi testnimi izpisi lahko napako še bolj podrobno lociramo.
27
Razhroščevanje s testnimi izpisi
Lahko izpisujemo tudi vrednosti različnih spremenljivk in opazujemo, če se spreminjajo v napačne vrednosti Koristna je uporaba pogojnega prevajanja, ki vklaplja ali izklaplja testne izpise if(debug) printf( ) Podobno dosežemo tudi z zakomentiranjem testnih izpisov // printf ( )
28
Prekinitvene točke Uporaba prekinitvenih točk
29
Nekaj misli o napakah “Teorija je nekaj, o čemer nekaj veš, vendar ne deluje. Praksa je nekaj kar deluje, pa ne veš zakaj. Programiranje združuje teorijo in prakso: nič ne dela in ne veš, zakaj...” -- Anonymous “If debugging is the process of removing bugs then programming must be the process of putting them in”
30
Dokumentiranje programa
Zakaj bi pisali dokumentacijo? Vrste dokumentacije Za programerja, ki je kodo (na primer razred) napisal Za programerja, ki kodo (razred) uporablja Za uporabnika aplikacije
31
Dokumentiranje: dogovori in stil
Dokumentiranje programa je pomembno za ponovno uporabo in vzdrževanje…nedokumentirana koda je praktično neuporabna! Kaj dokumentirati? Kako napisati dokumentacijo? Podpora programskih orodij? Napol formalna dokumentacija? Priporočilo: dokumentacijo pišimo v angleščini, navodila v slovenščini
32
Dokumentacija za uporabnike razredov
Java nudi avtomatski sistem dokumentacije, ki tvori za vsak razred datoteko HTML. To zagotavlja program javadoc Uporaba programa javadoc javadoc [options] filenames javadoc [options] packagename
33
Struktura in dokumentacija programa
Programske datoteke Pišimo posamezne razrede v ločenih datotekah. Tega se držimo tudi pri ne-javnih razredih. Izjema je enkratna uporaba ne-javnih razredov, ki jih ni smiselno uporabljati izven danega konteksta. Vsako datoteko začnemo z: Imenom datoteke in drugimi podatki, tudi o avtorju Datumi in seznamom sprememb in njihovih avtorjev Če je datoteka glavna vhodna točka paketa, kratko opišemo še namen paketa.
34
Struktura in dokumentacija programa
Paketi (packages) Nov javanski paket za vsak samostojen projekt ali skupino s povezano funcionalnostjo Datoteka index.html v vsakem direktoriju s kratkim opisom namena in strukture paketa
35
Primer programske datoteke
/* Datoteka: primer.java Datum Avtor Spremembe Sep S.Divjak Prva verzija Sep S.Divjak Popravki dokumentacije */ package demo; import java.util.NoSuchElementException;
36
Sintaksa komentarjev Javadoc
Začnejo z /** in končajo z */ Te komentarje program javadoc pretvori v dokumentacijo HTML. Ti komentarji lahko uporabljajo oznake HTML, kot na primer <PRE> in <TT>, ne pa strukturnih oznak kot <H2> ali <HR>. Komentarje za javadoc moramo pisati neposredno pred deklaracijo razreda, polja ali metode, ki jo opisujemo. Prvi stavek v takem komentarju mora biti povzetek, temu pa lahko sledi dodatne informacije, podane s posebnimi oznakami, ki začenjajo Taka oznaka mora biti na začetku vrstice.
37
Dokumentiranje deklaracij in izrazov
Lokalne deklaracije, stavki in izrazi Ne komentirajmo samoumevne kode, raje se potrudimo, da bo samoumevna! Primer: int index = -1; // -1 je zastavica, ki pomeni, da je indeks neveljaven Ali, kar je pogosto boljše: static final int INVALID= -1; int index = INVALID; Konsistentno uporabljajmo enak izgled kode: Število mest v zamikih kode. Levi oklepaj ("{") na koncu vrstice Maksimalno dolžino vrstice. Zamikanje pri prelomu dolgih vrstic. Deklaracijo vseh razrednih vrstic na enem mestu (na vrhu razreda).
38
Dogovori za imena Paketi (packages) Male črke.
Za prefikse priporočene domenske konvencije, opisane v specifikaciji Jave. Datoteke Enako ime kot ime javnega razreda, ki je v njih definiran. Razredi (classes) Velika začetnica, Z veliko črko začenjamo tudi interne besede v imenu razreda. Lokalne spremenljivke zacnemoZmaloCrkoInterneZacetkeInternihBesedZveliko ali Zacnemo_z_malo_uporabljamo_podcrtaje konstante (final) VELIKE_CRKE_S_PODCRTAJI
39
Dogovori za imena metode
Mala začetnica, Interne besede z veliko začetnico Metode, ko pretvorijo objek v tip X toX Metode, ki vrnejo vrednost atributa x tipa X X x() ali X getX(). Metode, ki spremenijo vrednost atributa x tipa X void x(X vrednost) ali void setX(X value).
40
Popoln primer /* * @(#)Blah.java 1.82 99/03/18 *
* Copyright (c) Sun Microsystems, Inc. * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. * All rights reserved. * This software is the confidential and proprietary information of Sun * Microsystems, Inc. ("Confidential Information"). You shall not * disclose such Confidential Information and shall use it only in * accordance with the terms of the license agreement you entered into * with Sun. */ package java.blah; import java.blah.blahdy.BlahBlah;
41
Popoln primer (2) /** * Class description goes here. *
Mar 1999 Firstname Lastname */ public class Blah extends SomeClass { /* A class implementation comment can go here. */ /** classVar1 documentation comment */ public static int classVar1; * classVar2 documentation comment that happens to be * more than one line long private static Object classVar2;
42
Popoln primer (3) /** instanceVar1 documentation comment */
public Object instanceVar1; /** instanceVar2 documentation comment */ protected int instanceVar2; /** instanceVar3 documentation comment */ private Object[] instanceVar3; /** * ...constructor Blah documentation comment... */ public Blah() { // ...implementation goes here... }
43
Popoln primer (4) /** * ...method doSomething documentation comment...
*/ public void doSomething() { // ...implementation goes here... } * ...method doSomethingElse documentation comment... someParam description public void doSomethingElse(Object someParam) {
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.